span term query 和 term query 有什么区别?

What the difference between span term query to term query?

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


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

VS

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

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

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

如果您有兴趣根据术语的相对位置查找匹配项,那么您应该转而使用 intervals query,它提供了 higher-level 用于邻近匹配的 DSL。

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