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
添加分词器

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值