查询包含所有单词的嵌套项

时间:2014-02-20 14:54:34

标签: elasticsearch

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

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

那么有没有办法告诉弹性搜索“至少有一步匹配所有单词”?

提前致谢, 文森特

1 个答案:

答案 0 :(得分:0)

最后解决问题:) 查询应该是:

{
  nested: {
     path: 'steps',
     query: {
       match: {
         text: {
           query: 'foo bar',
           operator: 'AND'
         }
       }
    }
  }
}

这样它只能找到一步包含'foo'和'bar'的项目。