2014-04-14 5 views
8

Zastanawiam się, czy istnieją zalecenia dotyczące używania analizatorów/filtrów do indeksowania/wyszukiwania ludzkich imion.Co to jest zalecany analizator/filtr dla ludzkich nazw w Elastic search

Przykłady nazw, które mogą stwarzać trudności:

  • Marc kontra Mark
  • Peter de Langhe kontra Peter Delange
  • Verhaeven kontra Verhaven
  • François porównaniu Francois

thx Marc

+0

Nie Naprawdę to, o co prosiłeś, ale zostawiam to tutaj, ponieważ jest to obowiązkowe dla wszystkich programowo przetwarzających nazwiska: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about -names/ Znalazłem go na slashdot kilka lat temu. Mam nadzieję, że uznasz to za stosowne i użyteczne. – Jarmund

+2

Mogę tylko zgadywać, ale wygląda na to, że prawdopodobnie najbardziej skorzystasz na dopasowaniu fonetycznym, które jest dostępne jako [wtyczka elasticsearch] (https://github.com/elasticsearch/elasticsearch-analysis-phonetic) – femtoRgon

Odpowiedz

3

Oto analizator i filtr, aby zacząć. Trudno jest objąć wszystkie przypadki, ale filtr asciifolding rozwiąże problemy z kartą Francois kontra Francois .

W poniższym przykładzie zachowa oryginał, aby zapytanie dla François i Francois rozwiązało ten sam zestaw wyników.

 "analyzer": { 
      "name_analyzer": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "trim", 
        "my_ascii_folding" 
       ] 
      } 
     }, 
     "filter": { 
      "my_ascii_folding" : { 
       "type" : "asciifolding", 
       "preserve_original" : true 
      } 
     } 

Source

Definiując filtr synonimów, można zdefiniować listę powszechnie podobnych nazwach w języku polskim (może linia jak François => Francois w swoich synonimów plików na przykład), że załatwi w krótki bieg.

Wreszcie filtr pattern_replace char z "([A-Za-z]+)ae([A-Za-z]+)" => "$1a$2" wzór można obrócić cały Verhaeven do Verhaven

Coś jak ...

 "char_filter": { 
      "ae_char_filter": { 
       "type": "pattern_replace", 
       "pattern": "([A-Za-z]+)ae([A-Za-z]+)", 
       "replacement": "$1a$2" 
      } 
     } 

Nawet Peter de Langhe kontra Peter Delange może być rozwiązany z pattern_replace filtr char:

 "char_filter": { 
      "de_char_filter": { 
       "type": "pattern_replace", 
       "pattern": "([A-Za-z]+) de ([A-Za-z]+)", 
       "replacement": "$1 de$2" 
      } 
     } 
Powiązane problemy