elasticsearch - 跨度术语查询与术语查询有什么区别?
问题描述
我在 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
查询。
推荐阅读
- r - Plot_ly 堆叠的条形图弄乱了 y 轴
- ruby-on-rails - 如何将 ID 提供给其他控制器:没有将 Symbol 隐式转换为 Integer 错误
- javascript - AngularJS 在 Chrome、IE、Mozilla 和 Edge 上运行良好,但在 IE11 中无法运行
- flutter - 颤振键盘隐藏不适用于标签点击
- android - 如何在多个视图周围绘制一个矩形
- php - 如何从php检索变量到android?
- python - 提取带有“数字字符串数字数字”的行并将其写入数据框
- unit-testing - 组件渲染函数中的Vue无限更新循环
- r - 如何在所有excel文件中找到确切的工作表数
- html - 宽度:最大内容,宽度:适合内容在 Edge 中不起作用