ElasticSearch常用查询关键字解读(match, term, range,terms)
本博文参考了官方文档:
https://www.elastic.co/guide/cn/index.html
虽然 Elasticsearch 自带了很多的查询,但经常用到的也就那么几个。
1. match 查询
无论你在任何字段上进行的是全文搜索还是精确查询,match
查询是你可用的标准查询。
如果你在一个全文字段上使用 match
查询,在执行查询前,它将用正确的分析器去分析查询字符串:
{ "match": { "tweet": "About Search" }}
Java代码
QueryBuilders.matchQuery("name", name)
2. multi_match 查询
multi_match
查询可以在多个字段上执行相同的 match
查询:
{
"multi_match": {
"query": "full text search",
"fields": [ "title", "body" ]
}
}
Java代码
QueryBuilders.multiMatchQuery("full text search","body","tile");
3.range 查询
range
查询找出那些落在指定区间内的数字或者时间:
{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}
Java代码:
QueryBuilders.rangeQuery("age").gte(20).lt(30)
被允许的操作符如下:
-
GT 就是 GREATER THAN大于
-
LT 就是 LESS THAN小于
-
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
4.term 查询
term
查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed
的字符串:
{ "term": { "age": 26 }}
{ "term": { "date": "2014-09-01" }}
{ "term": { "public": true }}
{ "term": { "tag": "full_text" }}
Java代码
QueryBuilders.termQuery("tags", tag)
注意: term中的搜索条件英文一定要小写!!!,因为分词的时候分词器默认将分词设置为小写
5. terms 查询
terms
查询和 term
查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件:
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}
Java代码
QueryBuilders.termsQuery("tags","Java","Python");
6. exists 查询和 missing 查询
exists
查询和 missing
查询被用于查找那些指定字段中有值 (exists
) 或无值 (missing
) 的文档。这与SQL中的 IS_NULL
(missing
) 和 NOT IS_NULL
(exists
) 在本质上具有共性:
{
"exists": {
"field": "title"
}
}
Java代码:
QueryBuilders.existsQuery("title");
基本常用的查询介绍到这,生产中我们多用组合多查询, 不大单独使用. 详见下一篇文章:
ElasticSearch组合多查询(must,should,must_not,filter)
上一篇: 仿射密码 ctf
下一篇: elasticsearch属性配置详解