- 浏览: 380045 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (215)
- ubuntu (27)
- 虚拟机 (13)
- 数据库 (29)
- JAVA (40)
- 搜索 (23)
- 开发工具 (2)
- 产品 (2)
- 工具 (1)
- 应用服务器 (5)
- linux (17)
- log (1)
- 多线程 (3)
- 异常 (1)
- shell (6)
- 12306 ;互联网 (1)
- 持续集成&Hudson (4)
- js (1)
- JAVA OR-Map (1)
- 漏洞 (1)
- svn (1)
- MAVEN (3)
- 架构 (1)
- windows (1)
- json (1)
- web (3)
- jenkins (2)
- iptables (2)
- JAVA ssh (0)
- 项目管理 (1)
- tomcat (1)
- 安全 (1)
- 数据库 mysql (1)
- 性能 (1)
最新评论
-
sbwfgihc:
怎么用的啊,
<转>mysql 树查询语句 -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
<转>Solr Suggest实现搜索智能提示 -
songsove:
请问您qq多少
solr 对拼音搜索和拼音首字母搜索的支持 -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
<转>Solr Suggest实现搜索智能提示 -
norain1988:
这样就可以实现相关搜索了吗
solr 百度相关搜索类似功能的实现
智能提示简介
搜索的智能提示目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上。
Solr Suggestion智能提示模块
作为一个应用广泛的搜索引擎系统,Solr内置了智能提示功能,它在Solr里叫做Suggest模块.该模块可选择基于提示词文本做智能提示,还支持通过针对索引的某个字段建立索引词库做智能提示。在诸多文档中都推荐使用基于索引来做智能提示,因此我们目前的实现也是采取该方案。
Solr Suggest的配置要点
Suggest字段的选择
因为现在整个平台是基于SPU的构建的,因此决定采用SPU关键属性组合及类目名称来做Suggest的索引字段。首先在schema.xml中添加存储Suggest的新字段,如下:
<field name="suggestion" type="string" indexed="true" stored="true" termVectors="true" multiValued="true"/>
在该field的配置中,FieldType的选择非常关键,通常建议智能提示字段的FieldType不需要配置复杂的Analyzer,避免因为分词导致智能提示的词失控。
配置Suggest模块
在solrconfig.xml文件中配置Suggest模块,其中Suggest依赖于SpellChecker模块,所以这两个都需要配置。具体配置如下:
<searchComponent class="solr.SpellCheckComponent" name="suggest"> <str name="queryAnalyzerFieldType">string</str> <lst name="spellchecker"> <str name="name">suggest</str> <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> <str name="field">suggestion</str> <!-- the indexed field to derive suggestions from --> <float name="threshold">0.0001</float> <str name="spellcheckIndexDir">spellchecker</str> <str name="comparatorClass">freq</str> <str name="buildOnOptimize">true</str> <!--<str name="buildOnCommit">true</str>--> </lst> </searchComponent> <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest"> <lst name="defaults"> <str name="spellcheck">true</str> <str name="spellcheck.dictionary">suggest</str> <str name="spellcheck.onlyMorePopular">true</str> <str name="spellcheck.extendedResults">false</str> <str name="spellcheck.count">10</str> <str name="spellcheck.collate">true</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler> <queryConverter name="phraseQueryConverter" class="com.hqb360.solr.suggest.PhraseQueryConverter"/>
上述配置的具体说明可参照solr的官方文档,下面对其中几个容易疑惑的地方做一下说明
- queryAnalyzerFieldType 配置参数
queryAnalyzerFieldType参数指定访问suggest的SearchHandler处理查询参数的Analyzer,如果指定的Analyzer很复杂的话,会导致suggest返回的结果不符合预期。在这们项目中,我们现希望Analyzer不对查询做任何的改变,因此选择string。
- spellcheck.dictionary的值必须与searchComponent中spellchecker标签下<str name=”name”>suggest</str>配置对应。
- Suggest返回结果的排序
spellchecker组件中的comparatorClass参数可配置Suggest返回结果的排序,目前有如下几种可选方案:- Empty – in which case the default is used.
- score – explicitly choose the default case
- freq – Sort by frequency first, then score.
- A fully qualified class name – Provide a custom comparator that implements Comparator<SuggestWord>.
可查看SuggestWordScoreComparator类了解更多细节
- QueryConverter定制
上面的配置中,我们定制了自己的QueryConverter,主要原因是Solr默认的SpellQueryConvert是根据空格对查询参数做分隔,导致 “nokia e”这样的字符被当作“nokia”,“e”这样的两个字符处理,不符合我们的要求。定制的PhraseQueryConverter代码,需要打成jar包,放到Solr能访问到的目录下,在我们系统中是${solr.solr.home}/lib目录。
Suggest测试
配置完成之后,重启Solr后,访问如下链接
http://192.168.100.10:8080/solr/suggest?q=motorola%20x
结果如下:
<response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">0</int> </lst> <lst name="spellcheck"> <lst name="suggestions"> <lst name="motorola x"> <int name="numFound">10</int> <int name="startOffset">0</int> <int name="endOffset">10</int> <arr name="suggestion"> <str>motorola xoom 3g版</str> <str>motorola xt875</str> <str>motorola xt300</str> <str>motorola xt883</str> <str>motorola xt702</str> <str>motorola xt806</str> <str>motorola xt800</str> <str>motorola xt502</str> <str>motorola xt882</str> <str>motorola xt316</str> </arr> </lst> <str name="collation">motorola xoom 3g版</str> </lst> </lst> </response>
需要注意的点
- 重启Solr后,第一次访问时需要在Suggest请求中添加spellcheck.build=true参数,用于创建spellchecker的索引。
- 通过threshold参数来限制一些不常用的词不出现在智能提示列表中,当这个值设置过大时,可能导致结果太少,需要引起注意。
存在的问题
目前主要存在的问题是使用freq排序算法,返回的结果完全基于索引中字符的出现次数,没有兼顾用户搜索词语的频率,因此无法将一些热门词排在更靠前的位置。这块可定制SuggestWordScoreComparator来实现,目前还没有着手做这件事情。
链接:http://www.colorfuldays.org/tag/solr/
评论
2 楼
panghaoyu
2017-03-17
实现一个智能提示功能需要ajax、数据库、jsp/php、算法等很多知识,
如果数据量大,还需要特殊优化
一个小功能,花费太大精力很不划算
92find.com上的一个js插件实现了搜索框自动补全托管服务,
只要一行javascript代码就可以实现百度、淘宝搜索框提示的全部功能
比如:汉字拼音匹配、拼音前缀匹配、模糊搜索、智能容错,还可以自定义提示词汇及其排序权重
花五分钟我的网站就可以部署同百度、淘宝一样强大好用的输入提示功能
同时兼容IE、Firefox、Safari、Chrome、Opera各种浏览器
兼容ios、Android、Windows
如果数据量大,还需要特殊优化
一个小功能,花费太大精力很不划算
92find.com上的一个js插件实现了搜索框自动补全托管服务,
只要一行javascript代码就可以实现百度、淘宝搜索框提示的全部功能
比如:汉字拼音匹配、拼音前缀匹配、模糊搜索、智能容错,还可以自定义提示词汇及其排序权重
花五分钟我的网站就可以部署同百度、淘宝一样强大好用的输入提示功能
同时兼容IE、Firefox、Safari、Chrome、Opera各种浏览器
兼容ios、Android、Windows
1 楼
panghaoyu
2017-03-15
实现一个智能提示功能需要ajax、数据库、jsp/php、算法等很多知识,
如果数据量大,还需要特殊优化
一个小功能,花费太大精力很不划算
我使用了92find.c-o-m的搜索框智能提示功能托管服务,
只要一行javascript代码就可以实现百度、淘宝搜索框提示的全部功能
比如:汉字拼音匹配、拼音前缀匹配、模糊搜索、智能容错,还可以自定义提示词汇及其排序权重
花五分钟我的网站就可以部署同百度、淘宝一样强大好用的输入提示功能
同时兼容IE、Firefox、Safari、Chrome、Opera各种浏览器
兼容ios、Android、Windows
如果数据量大,还需要特殊优化
一个小功能,花费太大精力很不划算
我使用了92find.c-o-m的搜索框智能提示功能托管服务,
只要一行javascript代码就可以实现百度、淘宝搜索框提示的全部功能
比如:汉字拼音匹配、拼音前缀匹配、模糊搜索、智能容错,还可以自定义提示词汇及其排序权重
花五分钟我的网站就可以部署同百度、淘宝一样强大好用的输入提示功能
同时兼容IE、Firefox、Safari、Chrome、Opera各种浏览器
兼容ios、Android、Windows
发表评论
-
百度GOOGLE的用户鼠标行为分析<转>
2012-08-29 09:37 1484转自:http://www.20ju.com/conte ... -
lucene 一些性能调优建议
2012-08-22 16:12 5533lucene 排序 Lucene默认按照相关度 ... -
<转>庖丁解牛分词之自定义词库[自定义词典]
2012-07-03 10:21 892原链接: http://hi.baidu.com/stone_ ... -
庖丁(Paoding)分词的词典原理解析
2012-07-03 10:14 3634Paoding分词过程中词典 ... -
solr 百度相关搜索类似功能的实现
2012-06-27 16:26 5734这个功能的实现有几种不同的思路。 大概半个月前,我在网 ... -
solr 索引库同步数据库
2012-06-27 14:01 5617对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输 ... -
solr 对拼音搜索和拼音首字母搜索的支持
2012-06-27 13:52 9047对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输 ... -
IK的整个分词处理过程
2012-06-26 14:25 11551IK的整个分词处理过 ... -
Solr的检索运算符
2012-06-21 14:47 4211“:” 指定字段查指定值,如返回所有值*:*² “?” 表示 ... -
Solr 学习(5) —- Solr查询语法和参数
2012-06-21 14:25 11162、查询语法 solr的一些查询语法 ... -
Apache Solr schema.xml及solrconfig.xml文件中文注解
2012-06-21 10:55 1157一、字段配置(schema)schema.xml位于so ... -
<转>LUCENE3.0 自学吧 4 TermDocs
2012-06-07 22:13 1205利用TermDocs也是可以得到一些有用的结果。。。代码 ... -
<转>Lucene里经常被聊到的几个话题
2012-06-07 21:54 1231lvpei.cnblogs.com.自己总结的Lucen ... -
<转>浅谈文档索引普遍原理<笔记>
2012-06-07 21:49 997--lvpei.cnblogs.com 搜索引擎普遍采 ... -
Lucene中Field类很重要
2012-06-07 21:46 8222org.apache.lucene.demo.Index ... -
Lucene架构简单分析
2012-06-06 15:30 1632Lucene简介Lucene 是一个基 ... -
<转>lucene3.0中Field.Index, Field.Store,Field.TermVector详解
2012-06-06 14:49 890lucene在doc.add(new Field(&quo ... -
<转>用于Lucene的各中文分词比较
2012-06-05 09:58 5552对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次 ... -
Lucene3参考资料
2012-06-05 09:46 963http://wenku.baidu.com/view/706 ... -
lucene索引word/pdf/html/txt文件及检索(搜索引擎)
2012-06-04 14:59 956因为lucene索引的时候是 ...
相关推荐
<groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>${solrj.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project....
NULL 博文链接:https://martin3000.iteye.com/blog/1328833
LoremIpsum搜索 包含与 lucene 和 solr 一起使用的搜索算法... export CLASSPATH="<lucene>/lucene/replicator/lib/*:<nutch>/build/*:<nutch>/build/lib/*:<lucene>/solr/dist/*:<lucene>/solr/ dist/solrj-lib/*:*:.
配置文件:<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" isIndistinct="true"/> ...
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/> </...
Solr实现电扇站内搜索Solr实现电扇站内搜索Solr实现电扇站内搜索Solr实现电扇站内搜索
ik,suggest 已经配置好了,可以在Windows/linux直接启动
<artifactId>quasar-solr-client</artifactId> <version>0.1.0</version> </dependency> 特征 支持基本查询。 待办事项清单 添加INSERT和UPDATE操作。 程式码范例 private final String QUORUM = " localhost:...
Solr-Maven插件 ... < artifactId>solr-maven-plugin</ artifactId> < version>0.5.0</ version> </ plugin> Sonatype信息库中的快照(每次推送均自动从Travis推送): < pluginRepositories> < plugin
《解密搜索引擎技术实战》第八章代码,用solr实现的搜索引擎。
资源名称:相关性搜索 利用Solr与Elasticsearch创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...
Solr源码在MyEclipse下的... <Environment name="solr/home" type="java.lang.String" value="E:\Solr" override="true" /> </Context> 注:value对应地址即你创建的solr/home目录地址 4. 部署到tomcat,开始Solr
配置文件:<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" isIndistinct="true"/> ...
使用Solr实现电商网站中商品信息搜索功能。 1、 可以根据关键字搜索商品信息 2、 可以根据商品分类、价格过滤搜索结果 3、 可以根据价格进行排序 4、 实现分页
<fieldType name="text_lk" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/> <filter class="solr....
<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" /> </analyzer> <analyzer type="query"> ...
基于Solr的分布式实时搜索模型研究与实现
Solr源码在MyEclipse下的... <Environment name="solr/home" type="java.lang.String" value="E:\Solr" override="true" /> </Context> 注:value对应地址即你创建的solr/home目录地址 4. 部署到tomcat,开始Solr
通过继承Analyzer编写自定义类UseSmartIKAnalyzer和NotUseSmartIKAnalyzer,实现智能分词和最细粒度分词,支持solr4.7通过配置schema.xml实现不同的分词效果 <fieldType name="text_ik" class="solr.TextField"> ...
通过solr实现电商搜索排名打分,排序,可自定义打分规则