首页 > 解决方案 > 跨度术语查询与术语查询有什么区别?

问题描述

我在 Elasticsearch 文档(6.8)中看到了关于跨度查询的部分,
请求和结果类似于一些术语级别的查询,但它提到跨度是“低级位置”,闻起来像更好的偏好(也许我错了)。
问题是如果我想使用纯术语查询(例如将用户与名称匹配),性能会有很大差异,还是在其他方面我更喜欢一个选项?


例子:
GET /_search
{
    "query": {
        "span_term" : { "user" : "kimchy" }
    }
}

VS

POST _search
{
  "query": {
    "term" : { "user" : "kimchy" } 
  }
}

标签: elasticsearchelasticsearch-query

解决方案


如果您只对通过精确值匹配字段感兴趣,那么term查询就是您要查找的查询。

跨度查询涉及更多(和低级)并处理术语的位置匹配。span_term是更复杂跨度查询的基本构建块之一,例如span_near,span_within等。您可以在以下位置找到一篇有趣的文章,展示跨度查询的功能和复杂性:https ://lucidworks.com/post/the-spanquery/

如果您有兴趣根据术语的相对位置查找匹配项,那么您应该转而使用intervalsquery,它为邻近匹配提供了更高级别的 DSL。

但最重要的是,如果您只想匹配user: kimchy,那么请使用更简单的term查询。


推荐阅读