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有自己的一套查询语言,今天先到这,等改天再做介绍。

(完)