博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch-搜索推荐
阅读量:4291 次
发布时间:2019-05-27

本文共 1426 字,大约阅读时间需要 4 分钟。

对于es中搜索推荐的功能的实现:

1.使用match_phrase_prefix来实现search-time搜索推荐,原理根match_phrase类似,唯一的区别是把最后一个term作为前缀去搜索,同时可以配置slop来调整搜索条件,也可以限制返回结果的数量,但是这种推荐方法还是需要用最后一个前缀去扫描大量的索引,性能会很差,在真实环境一般不推荐使用,我们可以使用以下第二种方式来实现。

GET /forum/article/_search{  "query": {    "match_phrase_prefix": {      "content": {        "query": "java t",        "slop":2,        "max_expansions": 10      }    }  }}

2.第一种方式为search-time的搜索推荐机制,现在我们实现另一种index-time的搜索机制

什么是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

什么是edge ngram,对于quick,anchor首字母后进行ngram

q

qu
qui
quic
quick

使用edge ngram将每个单词都进行进一步的分词切分,用切分后的ngram来实现前缀搜索推荐功能

搜索的时候,不用再根据一个前缀,然后扫描整个倒排索引了; 简单的拿前缀去倒排索引中匹配即可,如果匹配上了,那么就直接返回结果

2、实验一下ngram

PUT /my_index

{
“settings”: {
“analysis”: {
“filter”: {
“autocomplete_filter”: {
“type”: “edge_ngram”,
“min_gram”: 1,
“max_gram”: 20
}
},
“analyzer”: {
“autocomplete”: {
“type”: “custom”,
“tokenizer”: “standard”,
“filter”: [
“lowercase”,
“autocomplete_filter”
]
}
}
}
}
}

GET /my_index/_analyze

{
“analyzer”: “autocomplete”,
“text”: “quick brown”
}

PUT /my_index/_mapping/my_type

{
“properties”: {
“title”: {
“type”: “string”,
“analyzer”: “autocomplete”,
“search_analyzer”: “standard”
}
}
}

GET /my_index/my_type/_search

{
“query”: {
“match_phrase”: {
“title”: “hello w”
}
}
}

如果用match,只有hello的也会出来,全文检索,只是分数比较低

推荐使用match_phrase,要求每个term都有,而且position刚好靠着1位,符合我们的期望的

转载地址:http://bqrgi.baihongyu.com/

你可能感兴趣的文章
Storm并行度和流分组详解
查看>>
缓存数据预热详解
查看>>
热点数据降级详解(storm+nginx+lua)
查看>>
加载更多功能实现
查看>>
React相关Dom约束性和非约束性操作
查看>>
Hystrix高可用架构介绍
查看>>
netty源码分析之-SimpleChannelInboundHandler与ChannelInboundHandlerAdapter详解(6)
查看>>
netty源码分析之-开发过程中重要事项分析(7)
查看>>
Sublime Text3插件详解
查看>>
netty源码分析之-ByteBuf详解(8)
查看>>
javascript函数定义三种方式详解
查看>>
javascript中this关键字详解
查看>>
javascript关于call与apply方法详解
查看>>
netty源码分析之-ReferenceCounted详解(9)
查看>>
javascript闭包详解
查看>>
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>