elasticsearch 搜尋推薦及優化
阿新 • • 發佈:2019-01-30
搜尋推薦:類似百度,下拉框自動匹配輸入的內容
最後一個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
新增分詞器