2014-05-13 7 views
5

Mam katalog produktów, który indeksuję w ElasticSearch za pomocą klienta Elastica. Jestem bardzo nowy w ElasticSearch BTW.ElasticSearch - Wyszukiwanie łącznikami w nazwie

W moim katalogu są produkty, które mają 't-shirt' w nazwie. Ale nie będą one wyświetlane w wynikach wyszukiwania, jeśli wpiszę 'tshirt'.

Co mogę zrobić, aby 't-shirt' wyświetlało się również w wynikach?

Śledzę this samouczek i wdrożono następujące dla indeksów:

'analysis' => array(
    'analyzer' => array(
     'indexAnalyzer' => array(
      'type' => 'custom', 
      'tokenizer' => 'whitespace', 
      'filter' => array('lowercase', 'mySnowball') 
     ), 
     'searchAnalyzer' => array(
      'type' => 'custom', 
      'tokenizer' => 'whitespace', 
      'filter' => array('lowercase', 'mySnowball') 
     ) 
    ), 
    'filter' => array(
     'mySnowball' => array(
      'type' => 'snowball', 
      'language' => 'English' 
     ) 
    ) 
) 

Odpowiedz

6

Można spróbować usunąć łącznik przy użyciu filtru mapowanie char:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-mapping-charfilter.html

coś takiego byłoby usunąć łącznik:

{ 
    "index" : { 
     "analysis" : { 
      "char_filter" : { 
       "my_mapping" : { 
        "type" : "mapping", 
        "mappings" : ["-=>"] 
       } 
      }, 
      "analyzer" : { 
       "custom_with_char_filter" : { 
        "tokenizer" : "standard", 
        "char_filter" : ["my_mapping"] 
       } 
      } 
     } 
    } 
} 

to coś w rodzaju tępego instrumentu siłowego, ponieważ usunie wszystkie myślniki, ale powinno to sprawić, że "koszulka" i "koszulka" będą pasować do siebie:

+0

To działało idealnie dla mnie! Dzięki! – Hitesh

+0

Jeśli chcesz użyć kwerendy simple_query_string, nie zapomnij dodać "analyze_wildcard": true "jeśli chcesz używać symboli wieloznacznych. W przeciwnym razie nie możesz wyszukać t- *, ts *, ... – rvheddeg

+2

, a jeśli user search for "t shirt" – Julien