基于solr实现suggest自动提示

基于solr实现suggest自动提示

(0人)

免费

3.3 基于solr facet功能实现suggest

3.3.1 开始facet=true

  指定facet字段:facet.field=productName&facet.field=aaa

  指定前缀: facet.prefix=keyword

----------------------------

问题:实际需求是匹配:关键词(suggest源数据)、拼音、匹配简拼 也就是说我们查询时需要检索不同的字段(域),但是我们返回的结果集当中只包含关键词,这样基于以上三种实现方式比较困难。

实际生产环境:使用前缀匹配prefixQuery,同时指定返回字段,我们通过prefixQuery可以控制排序,比如:按结果数、按热度、按rank值等等。

简拼-开源包转换

非前缀匹配,采用分词策略-可能匹配结果集很多,效果不太好(转换率和直达率)

elevate.xml

facet如果长的话可以在配置文件中指定

<str name="facet.field">cat</str>

<str name="facet.field>manu_exact</str>

 

solr cloud(官方文档更多更全、基于ZooKeeper) 和 elasticSearch(可能是实现分布式策略不一样,可能是基于JVM的一个分布式)

Solr cloud-可以对一个shard进行拆分(动态拆分)

 

[展开全文]

1.suggest背景

1.1 增加用户体验

1.2 增加搜索的直达率

 

2.suggest实现机制和策略

2.1 提供了一个基于spellchecker的组件

2.2 提供了一个suggest组件

2.3 利用solr facet功能实现suggest

2.4 实际应用当中是如何实现suggest?

 

实现suggest的时候需要展示索引库,展示哪些资源由需求定义(JD基于商品-商品名称、品牌、分类...)

 

3.配置

3.1 基于spellchecker组件的实现suggest(配置非常方便,如果使用lucene可能需要自己编写代码)

-<str name="queryAnalyzerFieldType">text_general</str>需要和字段的type对应上

-配置多个spellchecker

-solr一切查询都经过RequestHandler-/spell-<arr name="last-components">

3.1.1 配置:searchComponent、requesrHandler 

学会怎么配置一个组件,实践中基于spellchecker实现比较少用

有不同的实现算法,不同的实现算法提供不同的纠错功能,是一个拼写检查的功能

实际中修改配置文件需要自己做加载策略,调用它的接口就可以(修改配置文件的几率还是挺大的)

基于编辑距离?

e.g.百度(法政先锋)

3.1.2 spellchecker可以实现suggestion,基于拼写检查,纠错的机制去实现-两种算法:都是基于编辑距离算法(jaro distance\LEVENSHTEIN)

3.2 基于Suggest组件实现Suggest

实现查询功能的时候,主要的配置就2个:SearchComponent和RequestHandler(开发和配置方便)

3.2.1 配置

通过配置组件,最终通过getSuggestions这个方法来获取结果集

3.2.2 注意:查询结果集基于索引文件(分词产生的term)

3.3

[展开全文]

QQ客服: 810476411

QQ咨询: 810476411

QQ吐槽: 810476411

服务时间: 9:00 - 21:00

刘老师: 18516031455

微信公众号:开源力量