2011-11-15 16 views
27

OK, nie udało mi się tego rozgryźć do tej pory. Mając nadzieję, że ktoś może zaoferować wgląd.Jak wyszukiwać zagnieżdżone obiekty za pomocą elastycznego wyszukiwania

Jak mogę znaleźć wszystkie dokumenty z filmem, który ma "test" w tytule wideo? Używam interfejsu API HTTP. (Zasadniczo, w jaki sposób wyszukiwać zagnieżdżone obiekty z elastycznego wyszukiwania? Wiem, że musi być docs tam, ale ja naprawdę nie udało się znaleźć.)

[{ 
    id:4635, 
    description:"This is a test description", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is a test title for a video", 
     description:"This is my video description", 
     url:"/url_of_video" 
    } 
}, 
{ 
    id:4636, 
    description:"This is a test description 2", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is an example title for a video", 
     description:"This is my video description2", 
     url:"/url_of_video2" 
    } 
}, 
{ 
    id:4637, 
    description:"This is a test description3", 
    author:"John", 
    author_id:51421, 
    video: { 
     title:"This is a test title for a video3", 
     description:"This is my video description3", 
     url:"/url_of_video3" 
    } 
}] 

Odpowiedz

24

ok, RTFM! W końcu znalazłem te strony (wcześniej powinno to zabrać więcej czasu z dokumentami) i wydaje się, że ustawiliśmy właściwość, która ma wideo do wpisania: zagnieżdżone, a następnie użyj zapytań zagnieżdżonych.

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html

Nadzieja pomaga to ktoś w dół drogi.

+1

Niekoniecznie trzeba zagnieżdżać wideo. Zobacz http://www.elasticsearch.org/blog/2010/02/12/yourdatayoursearch.html i moją odpowiedź poniżej. – dira

+0

Oto zaktualizowany link: http://www.elasticsearch.org/blog/your-data-your-search/ – swatkins

+1

Ten wpis na blogu okazał się bardzo pomocny: http://www.elasticsearch.org/blog/managing -relations-inside-elasticsearch/ – Quin

42

Niekoniecznie trzeba zagnieżdżać wideo; możesz odwzorować go jako normalne pole. Co oznacza, że ​​będzie ona przechowywać

'video:title': "This is a test title for a video3", 
'video:description':"This is my video description3", 
'video:url':"/url_of_video3" 

I można szukać video.title:'test'.

O ile je otrzymam, zagnieżdżone pola są użyteczne, gdy istnieje wiele zagnieżdżonych elementów i chcesz utworzyć zapytanie tylko dla zagnieżdżonych elementów. Na przykład, mając te dane

[{ 
    id:4635, 
    description:"This is a test description", 
    author:"John", 
    author_id:51421, 
    video: [ 
     { 
     title:"This is a test title for a video", 
     description:"This is my video description", 
     url:"/url_of_video" 
     }, 
     { 
     title:"This is an example title for a video", 
     description:"This is my video description2", 
     url:"/url_of_video2" 
     } 
    ] 
}, 
{ 
    id:4637, 
    description:"This is a test description3", 
    author:"John", 
    author_id:51421, 
    video: [ 
     { 
     title:"This is a test title for a video3", 
     description:"This is my video description3", 
     url:"/url_of_video3" 
     } 
    ] 
}] 

Jeśli chcesz szukać video.title: 'test' and video.description: 'description2' i wideo nie została zagnieżdżona, to daje fałszywy wynik (bo test jest w pierwszym filmie i description2 w sekundę, ale w ogóle pole wideo, które posiadasz).

W takim przypadku, jeśli mapujesz wideo jako zagnieżdżone, zapamięta każdy film jako oddzielną całość i wyszuka pojedyncze filmy, które pasują do tych warunków, więc dla video.title: 'test' and video.description: 'description2' nic nie zwróci, ponieważ zwróci jeden wynik .

+6

Ta odpowiedź zapewnia ważną różnicę między zagnieżdżaniem a przechowywaniem podporządkowania lub obiektu. Zagnieżdżanie tworzy dodatkowe dokumenty w indeksie i niepotrzebnie komplikuje sprawę @swatkins. –

+0

Co z polem z listą ciągów znaków? jak odzyskać tylko elementy listy i dokumenty z co najmniej jednym dopasowaniem na liście tego pola? –

Powiązane problemy