1. 程式人生 > >elasticsearch 搜尋推薦及優化

elasticsearch 搜尋推薦及優化

搜尋推薦:類似百度,下拉框自動匹配輸入的內容
       最後一個term字首搜尋,前面的 match搜尋,結合前兩搜尋篩選出結果
      max_expansions:指定prefix最多匹配多少個term,超過就不匹配了,限定效能(大資料)


ngram和index-time搜尋推薦原理

1、什麼是ngram

quick,5種長度下的ngram:

ngram length=1,  q u i c k
ngram length=2,  qu ui ic ck
ngram length=3,  qui uic ick
ngram length=4
, quic uick ngram length=5, quick 2、什麼是edge ngram quick,anchor首字母后進行ngram q qu qui quic quick 看到區別了嗎?

使用edge ngram將每個單詞都進行進一步的分詞切分,用切分後的ngram來實現字首搜尋推薦功能 :

hello world
hello we

h
he
hel
hell
hello       

w           
wo
wor
worl
world

搜尋時不需要根據字首掃描整個索引,直接匹配,match操作,全文檢索所以包含hello沒有w的也會被搜尋出來,可以用match_phrase卡一下


建立索引時可以直接指定長度,發現在哪裡指定了嗎?

PUT /my_index
{
    "settings": {
        "analysis": {
            "filter": {
                "autocomplete_filter": { 
                    "type":     "edge_ngram",
                    "min_gram": 1,
                    "max_gram": 3
                }
            },
            "analyzer": {
                "autocomplete"
: { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "autocomplete_filter" ] } } } } }

超過長度(3)之後的單詞的就不要了:hello——> hel
新增分詞器