Elasticsearch 的 query 查询支持多种模式,即查询所有、查询某个字段、查询多个字段、范围查询、精确查询和多精确查询等。
GET /_search { "query": { "match_all": {} } }
使用 match all,查询所有。
GET /_search { "query": { "match": { "filed": "value" }} }
使用 match,查询某个具体的字段。
GET /_search { "query": { "multi_match": { "query": "test", "fields": ["field1", "field2"] } } }
使用 multi_match 实现查询多个字段的值等于某个值的查询。
GET /_search { "query": { "range": { "age": { "gte": 30 } } } }
使用 range 实现范围查询。
GET /_search { "query": { "term": { "test_field": "test hello" } } }
使用 term 实现精确查询,即不对 test_field 字段进行分词,“test hello” 不会被拆分成 test 和 hello,而是精准匹配 “test hello”。
GET /_search { "query": { "terms": { "tag": [ "search", "full_text", "nosql" ] }} }
使用 term 也可以实现多精确查询。
我们在 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" ] }
即,我们再次成功创建了一个文档,现在,我们使用 query 查询所有的记录,具体命令如下:
GET /haicodernet/_search { "query": { "match_all": {} } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们查询了所有记录。
我们同样使用上面的数据,现在,我们使用 query 查询某个字段的值的记录,具体命令如下:
GET /haicodernet/_search { "query": { "match": { "author" : "cainiao pei" } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们查询了 author 字段的值为 “cainiao pei” 的所有记录。
我们同样使用上面的数据,现在,我们使用 query 查询多个字段的值的记录,具体命令如下:
GET /haicodernet/_search { "query": { "multi_match": { "query": "server", "fields": ["name", "tags"] } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们查询了 name 字段或者 tags 字段的值为 server 的记录。
我们同样使用上面的数据,现在,我们使用 query 实现范围查询,具体命令如下:
GET /haicodernet/_search { "query": { "range": { "categorys": { "gte": 12 } } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们使用 range 查询了 categorys 大于等于 12 的记录。
我们同样使用上面的数据,现在,我们使用 query 实现精确查询,具体命令如下:
GET /haicodernet/_search { "query": { "term": { "name" : "tools" } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们使用 term 实现了精确查询。
Elasticsearch 的 query 查询支持多种模式,即查询所有、查询某个字段、查询多个字段、范围查询、精确查询和多精确查询等。