Elasticsearch 是一个基于Lucene的搜索服务器,拥有高扩展性的开源全文搜索和统计分析引擎,能够实时存储、查询、分析大规模数据。下面就我们就用ElasticSearch来搭建一个站内搜索引擎。

下载与安装

通过官网下载地址https://www.elastic.co/downloads/elasticsearch 可以下载zip和tar版等的Elasticsearch。我下载的zip版。

下载完后新建一个放置程序的文件夹,解压缩,就可以获得Elasticsearch的程序目录,此时就是安装完毕了。

启动

安装好后,进入bin目录,然后打开elasticsearch.bat (windows用户,如果是Linux的话,打开elasticsearch)。

启动后,访问一下http://localhost:9200/,如果出现了Elasticsearch服务器的信息,则启动成功。信息大致如下:

{
  "name" : "xJZB5nJ",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "_alhAr8lQreJdritICy7Mg",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}

name是当前节点的名字,一个运行着的实例就是一个节点;cluster_name是当前集群的名字,有同样cluster_name的节点属于同一个集群。

配置

刚刚不过是启动了一下服务试试,接下来就是配置服务器了。配置文件有两个:

  • elasticsearch.yml 配置Elasticsearch
  • log4j2.properties 配置Elasticsearch的日志

elasticsearch采用YAML的配置格式,配置文件位于:elasticsearch-5.1.1\config\elasticsearch.yml

下面配置一下data目录和logs目录

path.data: E:/Search/data
path.logs: E:/Search/logs

交互

elasticsearch提供了以JSON为数据交换格式的RestFul API(提供GET、POST、PUT、DELETE等Restful方法),可供任何编程语言使用(如果是Java的话,可以使用Java内置的客户端),我们这里直接用浏览器进行一些简单的Get访问。

1 统计文档数量
URL:http://localhost:9200/_count?pretty
返回数据:

{
  "count" : 0,
  "_shards" : {
    "total" : 0,
    "successful" : 0,
    "failed" : 0
  }
}

pretty参数表示返回“美观的”JSON数据,即未经压缩的JSON数据。

2 往搜索引擎put数据
这个需要使用python的网络包(或其他编程语言的网络包,如Java可使用OkHttp),如下:

import requests
import json

url = "http://localhost:9200"

data = {
    "first_name":"John",
    "last_name":"Smith",
    "age":25
}

response = requests.put(url+"/megacorp/employee/1",data=json.dumps(data))
print(response.text)

这时候再访问http://localhost:9200/_count?pretty ,就可以看到count已经变为了1;同时,可以去data目录底下看看,里面就已经有数据了。

同时,我们可以访问:http://localhost:9200/megacorp/employee/1 ,就可以看到我们刚刚put到搜索引擎里面的文档内容了。

/megacorp/employee/1的含义为,索引为megacorp,对象为employee,ID为1。

3 检索文档
刚刚我们往搜索引擎里放了一个文档,下面来检索一下这个文档。打开链接:http://localhost:9200/megacorp/employee/_search 这个就是搜索了,通过这个API可以检索出前10个megacorp索引中对象为employee的文档。

4 指定查询条件检索文档
接下来指定一下查询条件检索文档:
http://localhost:9200/megacorp/employee/_search?q=age:25 指定条件为年龄=25,于是就可以查询出我们put到里面的文档了。