欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch常用查询关键字解读(match, term, range,terms)

程序员文章站 2022-07-09 12:40:52
...

本博文参考了官方文档: 

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)

被允许的操作符如下:

  1. GT 就是 GREATER THAN大于  
  2. LT 就是 LESS THAN小于 
  3. GE 就是 GREATER THAN OR EQUAL 大于等于 
  4. 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)

 

 

 

 

 

 

 

相关标签: ElasticSearch