Elasticsearch terms查询

terms 查询


只要有被提供的字段值(未被分析)被文档匹配,该文档将会被此terms查询匹配。

GET /_search
{
    "query": {
        "terms" : { "user" : ["kimchy", "elasticsearch"]}
    }
}

高亮terms查询只会尽力,根据所选择的高亮器的实现以及terms查询中字段值的数量,terms查询中的字段值可能不会被高亮。

1 字段值查找机制

当需要指定具有大量字段值的terms过滤器时,从索引中的文档中获取这些字段值将会非常有用。一个具体的例子就是用于过滤粉丝发送的推文。可能会在字段值过滤器中指定大量的用户id,在这种情况下,使用字段值过滤器查找机制就极为重要。

字段值查找机制支持以下选项:

  • index:从中获取字段值的索引
  • type:从中获取字段值的类型
  • id:从中获取字段值的文档的id
  • path:设置为用于为terms过滤器获取确切值的路径的字段
  • routing:当检索外部字段值文档时,需要使用自定义路由值

terms过滤器的值将会从由指定索引的指定类型的指定id确定的文档的字段中获取。在内部,需要执行获取请求来从指定路径获取值。此特性运行时,需要保证_source被存储。

如果“引用”字段值数据并不多,考虑使用具有单切片且跨所有节点备份的索引。查找字段值过滤器倾向于在本地节点上执行获取请求,尽量减少网络的使用。

执行具有大量字段值的terms查询将会非常缓慢,因为每个附加的字段值都需要额外的处理与内存。为了防止这一情况的发生,用于terms查询的字段值的最大数量(无论是直接指定的还是通过查找机制获取的)被限制为65536。对于特定索引,可以通过索引设置index.max_terms_count改变这一默认值。

2 案例:使用查找机制

PUT /users/_doc/2
{
    "followers" : ["1", "3"]
}

PUT /tweets/_doc/1
{
    "user" : "1"
}

note:设置user2的粉丝为user1与user3。

GET /tweets/_search
{
    "query" : {
        "terms" : {
            "user" : {
                "index" : "users",
                "type" : "_doc",
                "id" : "2",
                "path" : "followers"
            }
        }
    }
}

note:搜索user2的粉丝。

从文档查找获取terms查询所需的字段值,也可以从指定文档的内部对象的数组的指定字段中获取。

PUT /users/_doc/2
{
 "followers" : [
   {
     "id" : "1"
   },
   {
     "id" : "2"
   }
 ]
}

note:查找路径设置为followers.id即可。

翻译源:Elasticsearch 6.4 文档

你可能感兴趣的:(Elasticsearch terms查询)