elasticsearch - 如何在弹性搜索中搜索“foo ba*”?
问题描述
match_phrase
Elasticsearch 中有查询,也有查询wildcard
。有没有办法将两者结合起来搜索“foo ba *”之类的东西?
解决方案
这个问题的答案在于使用“跨度查询”。正如官方文档中提到的:
跨度查询是低级位置查询,它提供对指定术语的顺序和接近度的专家控制。
最终查询看起来像这样:
{
"query": {
"span_near" : {
"clauses" : [
{ "span_term" : { "field" : "foo" } },
{ "span_multi" : { "match": { "wildcard": { "field" : "ba*" } } } }
],
"slop" : 0,
"in_order" : true
}
}
}
笔记:
slop
用于提及不同的“跨度项”可以有多远。在这里,由于我们希望它们彼此相邻,我们将 指定slop
为 0。in_order
是关于术语的顺序是否重要。在我们的例子中,它是 - 因此true
。
推荐阅读
- azure - 在 Azure 数据工厂中更改 adf_publish 分支和路径
- java - 如何使用黑白选项 Mac OS 打印黑白文档?
- java - 如何计算日期的差异?
- python - 计算图像中白色背景上蓝调线的数量
- python - 熊猫中的日期列转换
- javascript - 使用 Ajv.js 一次编译多个 json 模式
- iot - Arduino UNO 显示 -999 湿度和温度值
- html - th:href Thymleaf 在链接文本中插入变量
- android - java.lang.NoClassDefFoundError:解析失败:Landroid/app/AppComponentFactory
- android - 我可以在 Worker 中使用 LiveData 来通知调用片段/活动的数据更改吗?