Apache Lucene是一个全文索引和检索的内核。在Lucene上发展出来的全文检索框架有很多(参考Wikipedia的相关页面)。其中Apache自家的框架叫Solr,不过目前最火的应该是ElasticSearch,还有专门的网站solr vs elasticsearch来对两者做对比。本文着重介绍如果在Windows 7底下安装ElasticSearch,以及遇到的一些问题。
下载和安装
首先需要安装好最新版的Java软件包,并配置JAVA_HOME环境变量到JAVA的安装目录。
从ElasticSearch的下载页面下载安装包。这里以ZIP包为例,下载ZIP包并解压到合适的目录,假设C:\ElasticSearch
。进到解压目录,里面的目录结构是:
bin\
elasticsearch.bat
elasticsearch-service.bat
...
lib\
logs\
...
直接执行elasticsearch.bat
就会在命令行窗口启动ElasticSearch,浏览器登陆localhost:9200
可以看到以下输出:
{
"name" : "f1aN2CW",
"cluster_name" : "elasticsearch_mae",
"cluster_uuid" : "j9gd9eEZRAGyVc_Ckxba6Q",
"version" : {
"number" : "5.5.2",
"build_hash" : "b2f0c09",
"build_date" : "2017-08-14T12:33:14.154Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
证明ElasticSearch已经成功运行。
安装成Windows服务遇到的问题
把ElasticSearch安装成Windows服务会更方便使用。按住Shift在bin目录上点击鼠标右键,选择运行命令行窗口。在窗口里执行:
elasticsearch-service install
上面的命令把ElasticSearch安装成Windows服务。
接着执行elasticsearch-service start
,在我的电脑上却发现启动失败。Logs目录里面的stderr日志显示:“传递给系统调用的数据区域太小”,搞得我丈二和尚摸不着头脑!经过一番调研终于发现解决方法。首先执行elasticsearch-service manager
打开一个对话框,在Java选项卡里面把Java Virtual Machine的路径设置成jvm.dll的绝对路径。在我的电脑上的设置是C:\Program Files\Java\jre1.8.0_121\bin\server\jvm.dll。随后再重新启动服务就大告成功了。
ElasticSearch有提供MSI安装包,如果直接用MSI安装包的话,并在安装时直接把ElasticSearch安装成服务,是不是就不会有上面遇到的问题了。可以在我的电脑上MSI安装包无法使用。不过增加一点配置方面的知识也挺好的。
尝试和操作
接下来做一些尝试操作。强烈推荐阮一峰的这篇文章全文搜索引擎 Elasticsearch 入门教程里面的操作相关的内容,这边就不再赘述了。不过那篇教程里面使用的是HTTP交互工具是curl,我这里要给大家推荐一款新的工具https://httpie.org/,带有很多特性,专门为HTTP设计,更适合用来做RESTfull的操作。它的命令行是http
,下面是http GET localhost:9200
的返回结果:
HTTP/1.1 200 OK
content-encoding: gzip
content-type: application/json; charset=UTF-8
transfer-encoding: chunked
{
"cluster_name": "elasticsearch_mae",
"cluster_uuid": "j9gd9eEZRAGyVc_Ckxba6Q",
"name": "f1aN2CW",
"tagline": "You Know, for Search",
"version": {
"build_date": "2017-08-14T12:33:14.154Z",
"build_hash": "b2f0c09",
"build_snapshot": false,
"lucene_version": "6.6.0",
"number": "5.5.2"
}
}
基本概念
ElasticSearch是基于Lucene,要用好ElasticSearch,有必要掌握一些Lucene的基本概念:
- 索引(Index),Lucene的核心概念是“索引”,所有的分析和检索都是在“索引”上操作的。
- 文档(Document),“索引”里面含有一个到多个“文档”。
- 字段(Field),每个“文档”又由一个或者几个“字段”构成。
以上,看起来挺简单的。需要注意的是,Lucene有自己的一套查询语言,今天先到这,等改天再做介绍。
(完)