查询嵌套项

问题描述:

我有在包含简单的嵌套项弹性搜索的索引,以这种方式定义:查询嵌套项

'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' 
     } 
     } 
    } 
    } 
} 

这样,它只能找到其中一个步骤包含“富”和“栏项目”。