如何使用 Elasticsearch 集群实现搜索功能?

搜索功能基本是前端项目必不可少的一个功能,而Elasticsearch是一款全文搜索引擎,也就是说可以通过Elasticsearch集群实现搜索功能。

Elasticsearch集群实现搜索功能可以将搜索过程分为两个基本步骤:数据索引步骤和数据搜索步骤。其中,数据索引步骤是使用Elasticsearch集群将原始数据存储到集群中以供搜索,执行此步骤之后,可以让搜索比较快。而数据搜索步骤是真正实现搜索功能的步骤。

搜索索引是搜索引擎首先处理的起点,是你的数据的存储的位置,可以使用Elasticsearch的Mapping,既可以映射普通字段,又可以映射特殊字段,比如搜索建议,自动完成等等。搜索索引的配置可以用JSON的格式来完成,如下所示:


{
	"name": {
    	"type": "text"
  }
}

当搜索索引配置完成后,就可以向Elasticsearch集群存储数据,数据可以使用JSON格式、XML格式进行存储。Elasticsearch集群支持单个文档加载、批量文档加载和流式文档加载等不同的形式进行文档存储,如下所示:


PUT /index/type/1
{
   “name”: “jack”
}

POST /index/_bulk
{ "index": { "_type": "_doc", "_id": 1 } }
{ "name" : "Jack" }
{ "index": { "_type": "_doc", "_id": 2 } }
{ "name" : "Tom" }
{ "index": { "_type": "_doc", "_id": 3 } }
 { "name" : "Lilei" }
 
 # 流式文档加载
POST /_bulk
{"index":{"_index":"bank","_type":"account"}}
{"account_number":1,"balance":200}
{"index":{"_index":"bank","_type":"account"}}
{"account_number":2,"balance":250} 

Elasticsearch集群支持多种查询请求,如果要搜索特定字段,可以使用要搜索字段query;也可以使用多字段查询,即multi literal query来实现查询,如下所示:


GET /index/type/_search
{
   "query": {
       "match": {
           "user": "zhangsan"
       }
   }
}

GET /index/type/_search
{
   "query": {
       "multi_match": {
           "query": "zhangsan",
           "fields": ["user", "name","address"]
       }
   }
}

构造查询请求完毕,便可以向Elasticsearch集群发送查询请求,通过Elasticsearch集群来检索出符合用户需求的结果,可以使用下面的代码来发送查询请求:


GET /index/type/_search
{
   "query": {
       "multi_match": {
           "query": "zhangsan",
           "fields": ["user", "name","address"]
       }
   }
}

最后,Elasticsearch集群会返回更多的结果,供用户浏览,实现搜索功能。

随机文章