2015-08-28 10 views
6

Pracuję nad projektem, w którym intensywnie korzystam z Elasticsearch i wykorzystuję zapytanie moreLikeThis do implementacji niektórych funkcji. Oficjalna dokumentacja dla zapytania MLT stwierdza co następuje:Elasticsearch: Jak przechowywać wektory terminowe

W celu przyspieszenia analizy, może to przyczynić się do przechowywania utrzymujące wektorów w czasie indeksu, ale kosztem wykorzystania dysku.

W sekcji ** Jak to działa *. Pomysł polega teraz na dostrojeniu mapowania, więc przechowuj wcześniej wyliczone wektory terminów. Problem polega na tym, że wydaje się niejasne z dokumentacji, jak dokładnie należy to zrobić. Z jednej strony, w dokumentacji MLT, dostarczają i przykład odwzorowania, która wygląda następująco:

curl -s -XPUT 'http://localhost:9200/imdb/' -d '{ 
    "mappings": { 
    "movies": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "term_vector": "yes" 
     }, 
     "description": { 
      "type": "string" 
     }, 
     "tags": { 
      "type": "string", 
      "fields" : { 
      "raw": { 
       "type" : "string", 
       "index" : "not_analyzed", 
       "term_vector" : "yes" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Z drugiej strony, w Term Vectors documentation, zapewniają odwzorowanie w Przykładu 1 sekcji, która wygląda następująco

curl -s -XPUT 'http://localhost:9200/twitter/' -d '{ 
    "mappings": { 
    "tweet": { 
     "properties": { 
     "text": { 
      "type": "string", 
      "term_vector": "with_positions_offsets_payloads", 
      "store" : true, 
      "index_analyzer" : "fulltext_analyzer" 
     }, 
     "fullname": { 
      "type": "string", 
      "term_vector": "with_positions_offsets_payloads", 
      "index_analyzer" : "fulltext_analyzer" 
     } 
     } 
    } 
    .... 

powinno create an index that stores term vectors, payloads etc.

teraz pytanie brzmi: które z mapowania powinny być stosowane? Czy jest to usterka w dokumentacji, czy coś mi brakuje?

+1

Drugi przykład tylko przechowywać dodatkowe informacje jak well.i Chyba powinno być dla ciebie za mało, wystarczy użyć „tak” – Mysterion

+0

ale jest to rodzaj zachowania someho gdzieś dokumentowałem?jak to "tak" robi coś, a "with_positions_offsets_payloads" robi więcej? –

Odpowiedz

7

Masz rację, nie wydaje się być wyraźnie wymienione w aktualnej wersji dokumentów, jednak w nadchodzącym wydaniu 2.0 documents jest bardziej szczegółowe wyjaśnienie.

Term wektory zawierają informacje o warunkach wytwarzanych sposobem analizy, w tym:

  • wykaz określeń.
  • pozycja (lub kolejność) każdego terminu.
  • początkowe i końcowe przesunięcia znaków odwzorowujące termin do jego początkowego ciągu.

Te wektory terminów można zapisać, aby można je było pobrać dla określonego dokumentu.

Ustawienie term_vector akceptuje:

  • no: brak wektory określony są przechowywane. (Domyślnie)
  • yes: Tylko terminy z dziedziny są przechowywane
  • with_positions: Warunki i pozycje są przechowywane
  • with_offsets: Terminy i korekcje znaków są przechowywane
  • with_positions_offsets: Terminy, pozycji i przesunięcia znaków są przechowywane
+0

cudownie, dziękuję :) Po prostu mam nadzieję, że dokument 2.0 odnosi się również do poprzednich wersji, ale z kilku testów zrobiłem, wygląda to tak, –