Elasticsearch查询字符串

Elasticsearch查询字符串教程

我们在使用 Elasticsearch 进行搜索时,可以使用查询字符串的形式,查询字符串有三种表现形式,即,不带任何符号的匹配、带 + 号的匹配和带 - 号的匹配。

因为,Elasticsearch 中的查询字符串的形式使用起来比较不方便,而且极其复杂,很容易出错,所以一般生产环境不使用。

Elasticsearch查询字符串详解

语法

GET indexname/_search?q=key:value GET indexname/_search?q=+key:value GET indexname/_search?q=-key:value

参数

参数 描述
indexname 需要搜索的索引名
key 需要搜索的键
value 需要搜索的键对应的值

说明

不带任何符号表示匹配 key 字段中包含 value 关键字的所有的记录,+ 号表示匹配 key 字段中必须包含 value 关键字的所有的记录,结果同第一条。

减号(-)表示匹配 key 字段中不包含 value 关键字的所有的记录。

_all metadata的原理和作用

GET indexname/_search?q=key:value
  • 直接可以搜索所有的 field,任意一个 field 包含指定的关键字就可以搜索出来。我们在进行中搜索的时候,难道是对 document 中的每一个 field 都进行一次搜索吗?不是的。
  • Elasticsearch 中的 _all 元数据,在建立索引的时候,我们插入一条 document,它里面包含了多个 field,此时,Elasticsearch 会自动将多个 field 的值,全部用字符串的方式串联起来,变成一个长的字符串,作为 _all field 的值,同时建立索引。

后面如果在搜索的时候,没有对某个 field 指定搜索,就默认搜索 _all field,其中是包含了所有 field 的值的。比如下面搜索

{ "name": "jack", "age": 26, "email": "jack@haicoder.net", "addrElasticsearchs": "guamgzhou" }

以上的记录会被拼成 “jack 26 jack@haicoder.net guangzhou”,作为这一条 document 的 _all field 的值,同时进行分词后建立对应的倒排索引。

案例

查询字符串搜索

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

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

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

07_Elasticsearch查询字符串.png

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

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

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

08_Elasticsearch查询字符串.png

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

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

即,我们再次成功创建了一个文档,现在,我们使用查询字符串进行文档搜索,具体命令如下:

GET /haicodernet/_search?q=author="cainiao pei"

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

09_Elasticsearch查询字符串.png

我们看到,我们查询了 author 字段为 “cainiao pei” 的所有文档,并返回了查询到的两条记录,同时,我们还可以通过 sort 来指定排序规则,具体命令如下:

GET /haicodernet/_search?q=author="cainiao pei"&sort=categorys:desc

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

10_Elasticsearch查询字符串.png

我们看到,我们查询了 author 字段为 “cainiao pei” 的所有文档并且使用了 sort 字段按照 categorys 进行降序排序,最终返回了查询到的两条记录按照了 categorys 降序排序了。

Elasticsearch查询字符串总结

我们在使用 Elasticsearch 进行搜索时,可以使用查询字符串的形式,查询字符串有三种表现形式,即,不带任何符号的匹配、带 + 号的匹配和带 - 号的匹配。

因为,Elasticsearch 中的查询字符串的形式使用起来比较不方便,而且极其复杂,很容易出错,所以一般生产环境不使用。