2013-08-08 9 views
5

{"query":{ "match" : { "content" : "2" } }} pasuje do wszystkich dokumentów, cała treść zawiera cyfrę 2, jednak chciałbym, aby treść była dokładnie równa 2, nie mniej, nie mniej - pomyśl o moim wymaganiu w duchu Stringa Javy. równa się.Dokładne dopasowanie (nie podłańcuchowe) w Elasticsearch

Podobnie do drugiego zapytania chciałbym dopasować, gdy treść dokumentu wynosi dokładnie "3 3" i nic więcej lub mniej. {"query":{ "match" : { "content" : "3 3" } }}

Jak mogę dokonać dopasowania ścisłego (String.equals) w Elasticsearch?

Odpowiedz

2

Bez wyświetlania mapowania rodzaju indeksu i przykładowych danych, trudno jest odpowiedzieć na to bezpośrednio - ale spróbuję.

bezceremonialny, powiedziałbym, że to jest podobna do tej odpowiedzi tutaj (https://stackoverflow.com/a/12867852/382774), gdzie można po prostu ustawić index opcję dziedzinie za content do not_analyzed w swoim mapowania:

"url" : { 
    "type" : "string", 
    "index" : "not_analyzed" 
} 

EDIT: I nie było jasne, wystarczy z moją oryginalną odpowiedzią, pokazaną powyżej. Nie chciałem się sugerować, że należy dodać przykładowy kod do zapytania, miałem na myśli, że trzeba określić w swoim rodzaju indeksu mapowania że pole url jest typu string i jest indeksowane, ale nie analizowano (not_analyzed).

Dzięki temu Elasticsearch nie będzie zajmować się analizowaniem (tokenizacją lub filtrowaniem tokena) pola podczas indeksowania dokumentów - po prostu zapisz je w indeksie w postaci, w jakiej istnieje w dokumencie. Aby uzyskać więcej informacji na temat odwzorowań, zobacz http://www.elasticsearch.org/guide/reference/mapping/ dla intro i http://www.elasticsearch.org/guide/reference/mapping/core-types/ dla szczegółów na not_analyzed (wskazówka: wyszukaj go na tej stronie).

+0

dziękuję za odpowiedź. Jaka jest dokładna składnia zapytania json? Na przykład "{" zapytanie ": { " dopasowanie ": { " treść ":" 2 2 " } }, " treść ": {" typ ":" ciąg "," indeks ":" nie_analizowany " } } 'nie działa. –

+0

Przed wykonaniem indeksowania i zapytań należy umieścić mapowanie w ElasticSearch: http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/ Po rozpoczęciu wyszukiwania danymi, zostały zapisane w ElasticSearch, teraz nic nie znajdziesz, ponieważ dokumenty są nadal analizowane w "stary" sposób (np. – jvwilge

2

Official Doc

Należy użyć filtru zamiast meczu.

{ 
"query" : { 
    "constant_score" : { 
     "filter" : { 
      "term" : { 
       "content" : 2 
      } 
     } 
    } 
} 

i masz dokumenty, których treść jest dokładna 2 zamiast 20 lub 2,1

Powiązane problemy