跨度词条查询与词条查询有什么区别?

问题描述

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


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

VS

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

解决方法

如果您只想按一个精确值匹配一个字段,那么term查询就是您要寻找的查询。

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

如果您有兴趣根据术语的相对位置查找匹配项,则应改用intervals query,它提供了用于接近匹配的高级DSL。

但是最重要的是,如果您只想匹配user: kimchy,那么就进行简单的term查询。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...