问题描述
我在Elasticsearch文档(6.8)中看到了有关范围查询的部分,
请求和结果类似于某些术语级别的查询,但是它提到跨度是“低级别的位置”,闻起来像是更好的首选项(也许我错了)。
问题是我是否要使用纯术语查询(例如将用户与姓名匹配),
在性能上或在其他方面我有一个较大的差异,我更喜欢另一个选项?
例子:
GET /_search
{
"query": {
"span_term" : { "user" : "kimchy" }
}
}
VS
POST _search
{
"query": {
"term" : { "user" : "kimchy" }
}
}
解决方法
如果您只想按一个精确值匹配一个字段,那么term
查询就是您要寻找的查询。
跨度查询涉及更多(且级别较低),并且处理术语的位置匹配。 span_term
是更复杂的跨度查询的基本构件之一,例如span_near
,span_within
等。您可以在以下位置找到一篇有趣的文章,展示跨度查询的功能和复杂性: https://lucidworks.com/post/the-spanquery/
如果您有兴趣根据术语的相对位置查找匹配项,则应改用intervals
query,它提供了用于接近匹配的高级DSL。
但是最重要的是,如果您只想匹配user: kimchy
,那么就进行简单的term
查询。