2014-02-14 96 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 –