2014-02-20 128 views
0

我有在包含簡單的嵌套項彈性搜索的索引,以這種方式定義:查詢嵌套項

'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

最後解決問題:) 查詢應該是:

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

這樣,它只能找到其中一個步驟包含「富」和「欄項目」。