我在弹性搜索中有一个包含简单嵌套项的索引,以这种方式定义:
'index' : 'items',
'body' : {
'name' : {'type' : 'string'},
'steps' : {
'type' : 'nested',
'text' : {'type' : 'string'},
}
}
每个步骤都是对象定义中的一行。让我们考虑一下我有以下四个对象:
obj1:
foo
obj2:
bar
obj3:
foo bar
obj4:
foo
bar
我希望能够搜索包含查询中所有单词的行的对象。因此,如果我使用'foo bar'查询,结果中只会出现'obj3'。
我当前的查询如下:
'index : 'items',
'body' : {
'query' : {
'match' : {
"steps.text": {
'query' : 'foo bar',
'operator' : 'and'
}
}
}
这个查询几乎可以工作(它会过滤掉obj1和obj2,因为它们只包含一个单词)但仍然会出现obj4。
那么有没有办法告诉弹性搜索“至少有一步匹配所有单词”?
提前致谢, 文森特
答案 0 :(得分:0)
最后解决问题:) 查询应该是:
{
nested: {
path: 'steps',
query: {
match: {
text: {
query: 'foo bar',
operator: 'AND'
}
}
}
}
}
这样它只能找到一步包含'foo'和'bar'的项目。