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)

被允许的操作符如下:

  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)