2016-11-18 151 views
0

我創建了Elasticsearch索引,其中一個嵌套字段的映射如下。Elasticsearch查詢嵌套對象無結果

"groups": { 
    "type": "nested", 
    "properties": { 
     "name": { 
      "type": "text" 
     }, 
     "value": { 
      "type": "text" 
     } 
    } 
} 

論ES版本的詳細信息,它的5.0和我使用Python官方客戶端elasticsearch-py在客戶端。我想根據它的來查詢這個嵌套字段。

可以說有另一個字段叫做名稱這是一個文本類型字段。我想查找以A開頭並落入指定組的所有名稱。

一些樣本數據,

組 - HR(名稱= HR,值=小時),市場營銷(名稱=營銷,價值=市場營銷) 名稱 - 安德魯,阿爾法,巴里,約翰

安德魯Alpha屬於HR組。

在此基礎上我想查詢

{ 
    'query': { 
     'bool': { 
      'must': [{ 
       'match_phrase_prefix': { 
        'title': 'A' 
       } 
      }] 
     }, 
     'nested': { 
      'path': 'groups', 
      'query': { 
       'bool': { 
        'must': [{ 
         'match': { 
          'groups.value': 'hr' 
         } 
        }] 
       } 
      } 
     } 
    } 
} 

對於此查詢我提到ES文檔,但此查詢不返回任何東西。如果有人能指出這個查詢或映射本身有什麼問題,那將是非常棒的。

回答

2

就快,你只需要移動bool/must查詢裏面的nested查詢:

{ 
    'query': { 
     'bool': { 
      'must': [ 
       { 
       'match_phrase_prefix': { 
        'title': 'A' 
       } 
       }, 
       { 
       'nested': { 
        'path': 'groups', 
        'query': { 
        'bool': { 
         'must': [{ 
          'match': { 
          'groups.value': 'hr' 
          } 
         }] 
        } 
        } 
       } 
       } 
      ] 
     } 
    } 
} 
+0

我需要更新我的映射來得到想要的結果? –

+0

它的工作。謝了哥們!!答案被接受,但是SO現在正在阻止我!所以在允許的時候會這樣做。 –

+0

沒有你的映射是好的,只是查詢格式不正確 – Val