`
hankesi2000
  • 浏览: 95805 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Solr的自动完成/自动补充实现介绍(第三部分)

 
阅读更多
原文URL:http://java.dzone.com/news/solr-and-autocomplete-part-3?mz=33057-solr_lucene

在之前的两个部分(part1part2)中,我们学会了如何配置和查询solr来获取自动完成的功能。今天,我们来看一下如果为suggester添加字段,以这种方式来提供自动完成的功能。


组件配置
在上一期的配置组件中添加如下的参数:
<str name="sourceLocation">dict.txt</str>

这样我们的配置就变成了:
<searchComponent name="suggest" class="solr.SpellCheckComponent"> 
<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">name_autocomplete</str> 
<str name="sourceLocation">dict.txt</str> 
</lst> 
</searchComponent>

使用这个参数,我们让suggest组件使用名叫dict.txt的文件作为solr的配置字典。

handler配置
handler的配置也需要添加额外的一个参数:
<str name="spellcheck.onlyMorePopular">true</str>


完整的配置为:
<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchComponent"> 
<lst name="defaults"> 
<str name="spellcheck">true</str> 
<str name="spellcheck.dictionary">suggest</str>  
<str name="spellcheck.count">10</str> 
<str name="spellcheck.onlyMorePopular">true</str> 
</lst> 
<arr name="components"> 
<str>suggest</str> 
</arr> 
</requestHandler>

这个参数告诉solr,当查询的结果数多于设定的count数时,返回点击数更多的那些。

Dictionary
我们告诉solr来使用这个字段,那么这个字段长的什么样呢?下面来看一个例子:
引用

# sample dict
Hard disk hitachi
Hard disk wd    2.0
Hard disk jjdd    3.0

这个字典的结果是什么样的呢?每个词组放在单独的一行中,每行以改词组的权重为结束(权重与词组之间以TAB字符分隔),这个权重就是跟spellcheck.onlyMorePopular=true 香港的参数,默认值为1.0。该字段必须以UTF-8的编码格式存储。每行前有#字符的将被忽略(注释行)。

数据
以这种方式,我们不需要数据,字段就是数据。

运行
在重新构建suggester之后,我们来看一下它的运行情况,输入命令:
引用
/suggest?q=Har

得到的结果为:
<?xml version="1.0" encoding="UTF-8"?> 
<response> 
<lst name="responseHeader">  
<int name="status">0</int>  
<int name="QTime">0</int> 
</lst> 
<lst name="spellcheck"> 
<lst name="suggestions"> 
<lst name="Dys">    
<int name="numFound">3</int>   
<int name="startOffset">0</int>    
<int name="endOffset">3</int>     
<arr name="suggestion">     
<str>Hard disk jjdd</str>   
<str>Hard disk wd</str> 
<str>Hard disk hitachi</str>   
</arr>  
</lst> 
</lst> 
</lst> 
</response>


结束语
跟预期一样,suggest的结果是按权重排序的。这里的大小写敏感(注意首字母).

你有什么建议呢?如果我们有一个很好的字典,这个字典的权重是基于用户的查询行为产生的,那么用户肯定会喜欢它!如果没有好的字典,还是不要用这种方式的好。

下一步
下一期,我们看一下不同方式的suggest产生的索引结构和大小。
  • 大小: 10.3 KB
分享到:
评论

相关推荐

    Java微服务架构l零从基础到精通高清视频教程全套 163课

    第3章 Docker实战开发 042设置镜像标签 024Docker 简介 025Docker 功能特点 026Docker 系统架构 027Docker 安装 028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker 客户端帮助命令 ...

    Java微服务架构163课

    第3章 Docker实战开发 042设置镜像标签 024Docker 简介 025Docker 功能特点 026Docker 系统架构 027Docker 安装 028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker ...

    java开源包3

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包4

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    JAVA上百实例源码以及开源项目源代码

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    JAVA上百实例源码以及开源项目

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    java开源包1

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包11

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包2

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包6

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包5

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包10

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包8

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包7

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包9

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包101

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    Java资源包01

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

Global site tag (gtag.js) - Google Analytics