2014-02-14 5 views
1

Предположим, что у меня есть запись, которая выглядит следующим образом:Поиск всех полей вложенного объекта в ElasticSearch

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

Я хотел бы, чтобы пользователи могли искать записи по автору, и если они входят в полный запрос Jordan 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 –

Смежные вопросы