solr spellcheck 功能
来源:互联网 发布:李连杰眼睛 知乎 编辑:程序博客网 时间:2024/05/17 22:24
需要实现多个field的spellcheck功能,一直犯迷糊,现在知道怎么用了
<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> <lst name="spellchecker"> <str name="name">default</str> <str name="classname">solr.IndexBasedSpellChecker</str> <str name="field">var_poi_chinese_str</str> <str name="spellcheckIndexDir">spellchecker</str> <str name="accuracy">0.7</str> <str name="buildOnCommit">true</str> </lst> <lst name="spellchecker"> <str name="name">brand</str> <str name="classname">solr.IndexBasedSpellChecker</str> <str name="field">brand</str> <str name="spellcheckIndexDir">brand_spellchecker</str> <str name="accuracy">0.3</str> <str name="buildOnCommit">true</str> </lst> <str name="queryAnalyzerFieldType">string</str></searchComponent>
要先有一个searchComponent,上面只是一个例子,brand是后面会用到的spellcheck.dictionary的标识,field是指在建索引过程中哪个field需要做spellcheck
accuracy是指字符串之间的distance要小于accuracy*query长度。
queryAnalyzerFieldType是指用哪个queryAnalyzer来进行分词,一般不分词,因为如果找到了任意一个term,表明这个query就是没问题的,就不会启动spellcheck功能。
<requestHandler name="/spell" class="solr.SearchHandler"> <lst name="defaults"> <str name="spellcheck.onlyMorePopular">false</str> <str name="spellcheck.extendedResults">false</str> <str name="spellcheck.count">3</str> </lst> <arr name="last-components"> <str>spellcheck</str> </arr></requestHandler>
<requestHandler name="/brand_spell" class="solr.SearchHandler"> <lst name="defaults"> <str name="spellcheck.dictionary">brand</str> <str name="spellcheck.onlyMorePopular">false</str> <str name="spellcheck.extendedResults">false</str> <str name="spellcheck.count">3</str> </lst> <arr name="last-components"> <str>brand_spellcheck</str> </arr></requestHandler>
这里是两个不同的requestHandler,设置spellcheck.dictionary可以指定使用哪个spellchecker来做拼写检查
如果要根据不同的field或者是使用不同的距离方法来进行拼写检查,就需要指定不同的spellchecker。或者新建一个requestHandler(这里不建议这样做,只会令solrconfig.xml文件看起来臃肿冗余)。但是,如果是同一个requestHandler里面要用好几个spellcheck,则需要满足它们的距离测量方法以及accuracy是相同的,否则只能使用不同的requestHandler。注意在requestHandler里面的最后有一个segment
<arr name="last-components"> <str>brand_spellcheck</str> </arr>这个last-components指定了该requestHandler使用哪个searchComponent来进行一些查询(或者是拼写检查等其他操作)。
不过requestHandler里面的那些searchComponent的属性都可以动态的使用url来设定。
例如:
http://10.141.201.53:8080/solr/poi/spell?wt=xml&indent=true&spellcheck=true&spellcheck.q=adibas&spellcheck.dictionary=brand
这是使用searchComponent里的brand来进行spellcheck的结果,可见由于它的accuracy只有0.3,所以得到的结果可以有很多(但是不多于spellcheck.count个)
这里使用searchComponent里的default来进行检查,accuracy有0.7,所以只找出了adidas一个(distance为1)
这里为什么brand没有找出adidas。。那是因为数据库里面的数据比较渣,adidas商店的brand信息为空,如果有的话,那么adidas肯定在第一个图里排第一。
好吧这里那就再举个例子:
http://10.141.201.53:8080/solr/poi/spell?wt=xml&indent=true&spellcheck=true&spellcheck.q=东方商厦店&spellcheck.dictionary=default
http://10.141.201.53:8080/solr/poi/spell?wt=xml&indent=true&spellcheck=true&spellcheck.q=东方商厦店&spellcheck.dictionary=brand
可以看到由于数据的不同以及accuracy的不同,default和brand这两个spellchecker返回的结果不同,但是距离最小的 东方商厦 都排在最前面
这里的spellcheck结果也有一个排序策略可供选择
<!-- comparatorClass be one of: 1. score (default) 2. freq (Frequency first, then score) 3. A fully qualified class name --> <str name="comparatorClass">freq</str>
默认是根据距离排名,也可以根据frequency或者是自定义排名
一般比较重要比较基本的用法就是这些,其他功能就可以参考solr的手册来使用了
SpellCheckComponent
- solr spellcheck 功能
- solr-spellcheck
- Solr SpellCheck实践
- solr spellcheck 距离选取方案
- WPF TextBox的SpellCheck功能
- solr5.3的spellcheck功能
- solr开发之拼写检查spellcheck
- solrj实现solr的suggestion(基于spellcheck)
- solr的spellcheck和suggest配置代码记录
- solr功能
- solr高亮(highlight),拼写检查(spellCheck),匹配相似(moreLikeThis) 应用实践
- WPF SpellCheck
- solr高亮功能
- Solr功能应用
- java solr功能代码
- Solr中文搜索纠错功能实现
- Solr学习总结-附加功能
- solr 中suggestion功能记录
- 九度1491解题报告
- javascript 常用函数归纳
- hdu1002 A + B Problem II(大数相加)
- java线程 返回值-回调
- C# DataTable.NewRow 方法
- solr spellcheck 功能
- javascript基础
- 抽象描述排序算法(不适合初学者)
- Fuzhou Problem 1920 Left Mouse Button
- C# DataSet.AcceptChanges 方法
- 关于Struts2.1.6中配置 constant name="struts.devMode" value="true" 在tomcat启动时报错的问题
- jersey client 发送Post请求 【带参数】
- hdu2054 A == B ?(高精度比较)
- Android数据库的使用