Elasticsearch短语搜索

Elasticsearch短语搜索教程

我们在使用 ElasticsearchDSL 进行搜索时,还可以使用短语搜索,短语搜索跟 全文检索 相反,短语搜索要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回。

Elasticsearch短语搜索详解

语法

GET /indexname/_search { "query" : { "match_phrase" : { "field" : "value1 value2" } } }

参数

参数 描述
indexname 需要搜索的索引名
field 需要查询的字段
value1 field需要查询的值
value2 field需要查询的值

说明

field 必须同时满足 value1 和 value2 才会被返回。

案例

短语搜索

我们在 Kibana 的控制台上,输入以下代码,新建一个文档

PUT /haicodernet/_doc/1 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

59_Elasticsearch短语搜索.png

我们看到,此时我们创建文档成功了,现在,我们再次输入以下代码,再次创建一条文档:

PUT /haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "server", "desc" : "server module", "categorys" : 10, "author" : "cainiao pei", "tags": [ "server", "python" ] }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

60_Elasticsearch短语搜索.png

同样,我们再次创建一条记录,使用如下命令:

PUT /haicodernet/_doc/3 { "index":"www.haicoder.net", "name" : "tools", "desc" : "tools module", "categorys" : 15, "author" : "cainiao pei", "tags": [ "tools", "vim" ] }

即,我们再次成功创建了一个文档,现在,我们使用 DSL 进行短语搜索,具体命令如下:

GET /haicodernet/_search { "query" : { "match_phrase" : { "desc" : "tools module" } } }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

61_Elasticsearch短语搜索.png

我们看到,我们使用 DSL 短语搜索了 desc 字段,desc 字段必须同时包含 tools 和 module 才能被返回,现在,我们修改短语搜索如下:

GET /haicodernet/_search { "query" : { "match_phrase" : { "desc" : "tools server" } } }

输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:

62_Elasticsearch短语搜索.png

我们看到,这次没有返回任何数据,因为,我们的短语搜索条件是必须要 desc 字段同时能满足 tools 和 server 才能返回,没有满足的条件,因此,没有返回任何数据。

Elasticsearch短语搜索总结

短语搜索跟全文检索相反,短语搜索要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回。