2014-04-29 10 views
17

Mam do czynienia z problemem z elastycznym wyszukiwaniem, w którym nie chcę, aby mój indeksowany termin był analizowany. Ale elastyczne wyszukiwanie ma pewne domyślne ustawienie, które tokenizuje je w przestrzeni. Dlatego moje zapytanie aspektowe nie zwraca oczekiwanego wyniku.Domyślny analizator indeksów w elasticssearch

Przeczytałem, że "index" : "not_analyzed" we właściwościach typu indeksu powinno działać. Ale problem polega na tym, że nie znam struktury dokumentu przed ręką. Byłbym indeksowanie losowych baz danych MySQL do elastycznego wyszukiwania bez znajomości struktury tabeli.

Jak mogę ustawić elastyczne wyszukiwanie tak, że domyślnie używa "index" : "not_analyzed", dopóki nie zostanie poproszony o inne. Dzięki

PS: Używam języka Java, jeśli mogę bezpośrednio użyć dowolnego interfejsu API.

Odpowiedz

17

użyję dynamicznych szablonów - powinien zrobić to, czego szukasz:

{ 
    "testtemplates" : { 
     "dynamic_templates" : [ 
      { 
       "template1" : { 
        "match" : "*", 
        "match_mapping_type" : "string", 
        "mapping" : { 
         "type" : "string", 
         "index" : "not_analyzed" 
        } 
       } 
      } 
     ] 
    } 
} 

Więcej o tym podejściu tutaj:

https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html#dynamic-templates

Ważne: Jeśli ktoś sugeruje Takie podejście do rozwiązania not_analyzed problem, to nie będzie działać! kluczowe analizator ma jakąś analizę na danych i konwersji danych do małych liter.

np. Data: ElasticSearchRocks ==> Keyword Analyzer: elasticsearchrocks

Spróbuj sam, analizując zapytanie i zobacz, co się dzieje.

curl -XPUT localhost:9200/testindex -d '{ 
    "index" : { 
     "analysis" : { 
      "analyzer" : { 
       "default" : { 
        "type" : "keyword" 
       } 
      } 
     } 
    } 
}' 

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html

+0

Dzięki dynamiczne szablony pracował dla mnie. –

+1

jest szczególnie przydatny, jeśli używasz tego w domyślnym mapowaniu: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/default-mapping.html –

+0

Dokumenty dynamicznego szablonu odwzorowania zostały przeniesione: https: // www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html#dynamic-templates (edit: oh, poszedł dalej i redagował odpowiedź bezpośrednio .. kto czyta komentarze w dowolny sposób: P) – Kaos

6

dodać index.analysis.analyzer.default.type: keyword w elasticsearch.yml.

+0

Działa ... Dzięki – Sivailango

Powiązane problemy