Elasticsearch latinična slova - autocomplete/suggestions

Opseg

Referenca za pravljenje indexa u elasticsearch-u za srpska latinična slova. Ne obuhvata instalaciju elasticsearch-a i ubacivanje dokumenata.

Kreiranje indeksa

Ovo je primer kako sam podesio autocomplete ili search suggestions za latinićna slova sa elasticsearch-om.

Filter ascii_folding pretvara slova sa kukicom u slova bez.

ćžšž => czsz

U slučaju pisanja đ kao dj može se koristiti char_filter:

  "char_filter": {
    "my_char_filter": {
      "type": "mapping",
      "mappings": [
        "dj => đ"
      ]
    }
  }

Filter split_modles sam koristio da bih podelio brojeve modela proizvoda koji su sastavljeni od karaktera i slova na zasebne tokene (reči). Na primer: mx270 će biti podeljen na mx i 270.

Polje koje se mapira na ovaj način je name.

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter" : {
        "ascii_folding" : {
            "type" : "asciifolding",
            "preserve_original" : true
        },
        "split_models": {
          "type": "word_delimiter",
          "preserve_original": true,
          "split_on_numerics": true
        }
      },
      "analyzer": {
        "rs_analyzer":{
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "ascii_folding", "split_models", "ascii_folding"]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "mapping",
          "mappings": [
            "dj => đ"
          ]
        }
      }
    }
  },
  "mappings": {
    "products": {
      "properties": {
        "name": {
          "type": "string",
          "analyzer": "rs_analyzer"
        }
      }
    }
  }
}

Testiranje

Metoda _analyze prikazuje koji tokeni su izgenerisani za dati tekst.

GET /my_index/_analyze
{
  "analyzer": "rs_analyzer",
  "text": "Klasična gitara"
}

Povlacenje podataka

Instant search, ili search-as-you-type može biti implementiran korišćenjem match_phrase_prefix query-ja.

GET /my_index/products/_search
{
  "query": {
    "match_phrase_prefix" : {
        "name" : {
            "query": "gitara klasicna", 
            "slop":  10
        }
    }
  }
}

Interesantna opcija može biti i highlighting koji će okružiti tekst koji se podudara sa traženim rečima u <em> koji se lako može stilizovati.

Author

I plan to write more articles about common laravel components. If you are interested let’s stay in touch.
comments powered by Disqus