我们在使用 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 关键字的所有的记录。
GET indexname/_search?q=key:value
后面如果在搜索的时候,没有对某个 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" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,此时我们创建文档成功了,现在,我们再次输入以下代码,再次创建一条文档:
PUT /haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "server", "desc" : "server module", "categorys" : 10, "author" : "cainiao pei", "tags": [ "server", "python" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
同样,我们再次创建一条记录,使用如下命令:
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"
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们查询了 author 字段为 “cainiao pei” 的所有文档,并返回了查询到的两条记录,同时,我们还可以通过 sort 来指定排序规则,具体命令如下:
GET /haicodernet/_search?q=author="cainiao pei"&sort=categorys:desc
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们查询了 author 字段为 “cainiao pei” 的所有文档并且使用了 sort 字段按照 categorys 进行降序排序,最终返回了查询到的两条记录按照了 categorys 降序排序了。
我们在使用 Elasticsearch 进行搜索时,可以使用查询字符串的形式,查询字符串有三种表现形式,即,不带任何符号的匹配、带 + 号的匹配和带 - 号的匹配。
因为,Elasticsearch 中的查询字符串的形式使用起来比较不方便,而且极其复杂,很容易出错,所以一般生产环境不使用。