2014-02-14 130 views
1

假設我有一個看起來像這樣的記錄:搜索所有字段嵌套對象ElasticSearch

{ 
    "title": "Random title", 
    "authors": [ 
     { 
      "first": "Jordan", 
      "last": "Reiter" 
      … more fields here … 
     }, 
     { 
      "first": "Joe", 
      "last": "Schmoe" 
      … more fields here … 
     }, 
    ] 
} 

我希望用戶能夠按作者搜索記錄,如果他們進入全面查詢約旦Reiter它拉起這個記錄(和其他至少有一個作者匹配這些字段的其他人)。

我不希望用戶必須指定第一個/最後一個字段,我不一定知道他們是否搜索Jordan ReiterReiter Jordan甚至J Reiter如此理想,我想匹配所有這些情況,同時仍然過濾它使,例如,這些記錄與匹配:

{ 
    "title": "About Jordan Reiter", 
    "authors": [ 
     { 
      "first": "Susan", 
      "last": "Schmusan" 
      … more fields here … 
     } 
    ] 
} 


{ 
    "title": "Completely different authors", 
    "authors": [ 
     { 
      "first": "Robert", 
      "last": "Jordan" 
      … more fields here … 
     }, 
     { 
      "first": "Samuel", 
      "last": "Reiter" 
      … more fields here … 
     }, 
    ] 
} 

在ElasticSearch剛剛起步,所以如果有一個基本的概念,我很想念讓我知道。

我打算讓作者字段爲嵌套類型。在第一個和最後

回答

2

多匹配查詢,我想: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html(與phrase_prefix條款,也許) 裹成一個嵌套查詢: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

而且你必須提供一個映射,將明確指定你的「作者」是一個嵌套類型: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html

如果沒有作家映射爲一個嵌套的類型,然後ElasticSearch將在內部創造「第一」的所有一個長長的清單和所有的「最後一個」值的一個長長的清單,所以你不能匹配組合一個特定的「第一」和「最後」字段。

+1

是的,這將做到這一點。我沒有意識到你可以搜索字段列表。但是,我將它作爲嵌套查詢搜索來完成。從這裏回答:http://stackoverflow.com/a/17937816/255918 –