elasticsearch - ElasticSearch 词袋字段匹配
问题描述
我一直在尝试用 ES 做一件非常简单的事情,并且只能通过一种解决方法进行管理:给定一个查询和一个文档字段,将所有查询的术语与所有字段的术语匹配。换句话说 :
- 查询的术语是字段的子集
- 该字段的术语是查询的子集
and
通过在匹配查询中使用运算符来满足要求 1) 。但我一直无法找到2)的方法。
到目前为止,我设法实现这一目标的唯一方法是利用highlight
并要求突出显示所有字符串(在我的应用程序逻辑中)
还有其他方法吗?
例子:
PUT bananas/banana/1
{ "name" : "banana"}
PUT bananas/banana/2
{ "name" : "ripe banana"}
PUT bananas/banana/3
{ "name" : "not so ripe banana"}
GET bananas/_search
{
"query" : {
"match": { "_all": { "query": "ripe banana", "operator": "and" } }
},
"highlight" : {
"fields" : { "*" : { } },
"require_field_match": false
}
}
# Result (hits only):
"hits" : {
"hits" : [
{
"_index" : "bananas",
"_type" : "banana",
"_id" : "3",
"_score" : 0.5753642,
"_source" : {
"name" : "not so ripe banana"
},
"highlight" : {
"name" : [
"not so <em>ripe</em> <em>banana</em>"
]
}
},
{
"_index" : "bananas",
"_type" : "banana",
"_id" : "2",
"_score" : 0.51623213,
"_source" : {
"name" : "ripe banana"
},
"highlight" : {
"name" : [
"<em>ripe</em> <em>banana</em>"
]
}
}
]
}
所以在这种情况下,我想排除“不那么成熟的香蕉”的结果(它甚至出于某种原因首先返回!)。我的解决方法是检查highlight
响应的部分以查看是否有未突出显示的内容
解决方案
推荐阅读
- c# - 使用变量来存储类型
- android - 如何检查 EditText 的长度以及是否更多的是“X”将全文放到另一个 EditText 中?
- c# - `return SomeFuncAsync()` 和 `await SomeFuncAsync(); 之间有什么区别吗?返回;`?
- python - Python Paramiko 期望没有捕捉到提示
- pandas - 为条形图中的轨迹编写函数
- ios - 使用 VS for Mac 打包和分发 Xamarin iOS 应用程序
- http - HTTP/1.1 401 需要授权错误 - Twitter API
- c# - 尝试在 ASP.NET Gridview 中触发 RegularExpressionValidator 时如何防止 CompareValidator 触发?
- python - 返回字符串的算法如下?
- python - 将 Python 数组写入 txt 文件,每行一个数组