当前位置:   article > 正文

Elasticsearch terms查询_{searchterms}

{searchterms}

terms 查询


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

GET /_search
{
    "query": {
        "terms" : { "user" : ["kimchy", "elasticsearch"]}
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

高亮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"
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

GET /tweets/_search
{
    "query" : {
        "terms" : {
            "user" : {
                "index" : "users",
                "type" : "_doc",
                "id" : "2",
                "path" : "followers"
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

note:搜索user2的粉丝。

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

PUT /users/_doc/2
{
 "followers" : [
   {
     "id" : "1"
   },
   {
     "id" : "2"
   }
 ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

翻译源:Elasticsearch 6.4 文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/807229
推荐阅读
相关标签
  

闽ICP备14008679号