es(5)—terms的用法

1. 官网描述

es(5)—terms的用法_第1张图片
image.png

官方文档中的描述:返回包含一个或者多个terms提供属性字段的文档,terms的用法和term相同,可以匹配到多个相似的值。

term关键字相当于:select * from index where 属性='';
terms关键字相当于:select * from index where 属性= '' or 属性='';

语法:

GET test_terms/_search
{
  "query": {
    "terms": {
      "FIELD": [
        "VALUE1",
        "VALUE2"
      ],
      "boost":1.0
    }
  }
}
  • :terms提供数组的每一个值都可以去找到对应的文档,但注意terms提供的值必须和文档的倒排索引字段完全匹配,包括空格和大写字母。默认情况下,Elasticsearch将terms查询限制为最多65,536个词。您可以使用index.max_terms_count设置更改此限制。

  • boost:权重,默认1.0。


注意:terms搜索的字段类型不推荐为text类型。您可以将terms看做多个term的or操作。

2. 实战分析

2.1 数据准备

# 创建索引
PUT test_terms


#创建映射
PUT test_terms/_mapping
{
  "properties":{
    "aid":{
      "type":"keyword",
      "index":true
    },
    "name":{
      "type":"text",
      "index":true
    },"tag":{
      "type":"keyword",
      "index":true
    }
  }
}

#查看映射
GET test_terms/_mapping

# 批量生成数据
POST _bulk
{"create":{"_index":"test_terms","_type":"_doc"}}
{"aid":"1001","name":"JAVA book","tag":["JAVA","book"]}
{"create":{"_index":"test_terms","_type":"_doc"}}
{"aid":"1002","name":"PHP dic page","tag":["PHP","page","learning"]}
{"create":{"_index":"test_terms","_type":"_doc"}}
{"aid":"1003","name":"JAVA hadoop","tag":["hadoop","JAVA"]}
{"create":{"_index":"test_terms","_type":"_doc"}}
{"aid":"1004","name":"hadoop","tag":["hadoop"]}

# 单条插入数据
POST test_terms/_doc
{
  "aid":"1005",
  "name":"JAVA ES hadoop",
  "tag":["JAVA","JAVA","ES"]
}

2.2 terms相当于多个term操作

es(4)—查询条件match和term文中指出,term不推荐查询text类型,所以terms也不推荐去查询text类型。

es(5)—terms的用法_第2张图片
image.png

上面的语句等效于

GET test_terms/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "aid": {
            "value": "1001",
            "boost": 1
          }
        }},
        {
          "term": {
            "aid": {
              "value": "1002",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}

2.3 terms查询数组类型

es的复杂数据结构。es(4)—查询条件match和term,可能包含数组结构,项目中的标签属性。

例如上文中的tag属性。例如

{
  "aid":"1005",
  "name":"JAVA ES hadoop",
  "tag":["JAVA","JAVA","ES"]
}

tag在倒排索引中存储的便是JAVAES

在使用terms搜索tag字段时,若terms中的任一元素可以查看到tag的倒排索引,那么便会将搜索出对应的文档。

es(5)—terms的用法_第3张图片
image.png

推荐阅读

ES 7.x官方文档

你可能感兴趣的:(es(5)—terms的用法)