查询嵌套项
问题描述:
我有在包含简单的嵌套项弹性搜索的索引,以这种方式定义:查询嵌套项
'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仍然出现。
那么有没有办法告诉弹性搜索“至少有一个步骤匹配所有的单词”?
由于提前, 文森特
答
最后解决问题:) 查询应该是:
{
nested: {
path: 'steps',
query: {
match: {
text: {
query: 'foo bar',
operator: 'AND'
}
}
}
}
}
这样,它只能找到其中一个步骤包含“富”和“栏项目”。