2015-06-30 12 views
6

Używam Nutch do indeksowania witryny i indeksowania jej w wyszukiwarce elastycznej. Moja witryna zawiera metatagi, niektóre z nich zawierają listę identyfikatorów oddzielonych przecinkami (które zamierzam użyć do wyszukiwania). Na przykład:Indeksowanie pola wartości rozdzielonych przecinkami w wyszukiwaniu elastycznym

contentTypeIds = "2,5,15". (uwaga: brak nawiasów kwadratowych).

Gdy ES indeksuje to, nie mogę wyszukać contentTypeIds: 5 i znaleźć dokumenty, których contentTypeIds zawierają 5; to zapytanie zwraca tylko dokumenty, których contentTypeIds ma dokładnie "5". Jednak chcę znaleźć dokumenty, których contentTypeIds zawierają 5.

W Solr jest to rozwiązywane przez ustawienie pola contentTypeIds na multiValued = "true" w pliku schema.xml. Nie mogę znaleźć sposobu na coś podobnego w ES.

Jestem nowy w ES, więc prawdopodobnie coś przeoczyłem. Dzięki za pomoc!

Odpowiedz

11

Utwórz custom analyzer, który podzieli zindeksowany tekst na tokeny za pomocą przecinków.

Następnie możesz spróbować wyszukać. Jeśli nie zależy Ci na trafności, możesz użyć filtra do przeszukiwania swoich dokumentów. Mój przykład pokazuje, jak możesz spróbować wyszukać za pomocą term filter.

Poniżej znajdziesz, jak to zrobić za pomocą wtyczki sensownej.

DELETE testindex 

PUT testindex 
{ 
    "index" : { 
     "analysis" : { 
      "tokenizer" : { 
       "comma" : { 
        "type" : "pattern", 
        "pattern" : "," 
       } 
      }, 
      "analyzer" : { 
       "comma" : { 
        "type" : "custom", 
        "tokenizer" : "comma" 
       } 
      } 
     } 
    } 
} 

PUT /testindex/_mapping/yourtype 
{ 
     "properties" : { 
      "contentType" : { 
       "type" : "string", 
       "analyzer" : "comma" 
      } 
     } 
} 

PUT /testindex/yourtype/1 
{ 
    "contentType" : "1,2,3" 
} 

PUT /testindex/yourtype/2 
{ 
    "contentType" : "3,4" 
} 

PUT /testindex/yourtype/3 
{ 
    "contentType" : "1,6" 
} 

GET /testindex/_search 
{ 
    "query": {"match_all": {}} 
} 

GET /testindex/_search 
{ 
    "filter": { 
     "term": { 
      "contentType": "6" 
     } 
    } 
} 

Mam nadzieję, że to pomaga.

+0

działa dobrze, wielkie dzięki! – Yann

+0

i działało również z indeksowaniem Nutch! – Yann

Powiązane problemy