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

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

组件配置  
在上一期的配置组件中添加如下的参数:

Xml代码  
  1. <str name="sourceLocation">dict.txt</str>

这样我们的配置就变成了:

Java代码  
  1. <searchComponent name="suggest" class="solr.SpellCheckComponent">
  2. <lst name="spellchecker">
  3. <str name="name">suggest</str>
  4. <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
  5. <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
  6. <str name="field">name_autocomplete</str>
  7. <str name="sourceLocation">dict.txt</str>
  8. </lst>
  9. </searchComponent>

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

handler配置  
handler的配置也需要添加额外的一个参数:

Xml代码  
  1. <str name="spellcheck.onlyMorePopular">true</str>

完整的配置为:

Xml代码  
  1. <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchComponent">
  2. <lst name="defaults">
  3. <str name="spellcheck">true</str>
  4. <str name="spellcheck.dictionary">suggest</str>
  5. <str name="spellcheck.count">10</str>
  6. <str name="spellcheck.onlyMorePopular">true</str>
  7. </lst>
  8. <arr name="components">
  9. <str>suggest</str>
  10. </arr>
  11. </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代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3. <lst name="responseHeader">
  4. <int name="status">0</int>
  5. <int name="QTime">0</int>
  6. </lst>
  7. <lst name="spellcheck">
  8. <lst name="suggestions">
  9. <lst name="Dys">
  10. <int name="numFound">3</int>
  11. <int name="startOffset">0</int>
  12. <int name="endOffset">3</int>
  13. <arr name="suggestion">
  14. <str>Hard disk jjdd</str>
  15. <str>Hard disk wd</str>
  16. <str>Hard disk hitachi</str>
  17. </arr>
  18. </lst>
  19. </lst>
  20. </lst>
  21. </response>

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

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

下一步  
下一期,我们看一下不同方式的suggest产生的索引结构和大小。

Solr的自动完成/自动补充实现介绍(3)相关推荐

  1. Waymo研发经理:《自动驾驶感知前沿技术介绍》

    Waymo研发经理|自动驾驶感知前沿技术介绍 这是Waymo研发经理(VoxelNet作者)的一个最新分享报告:<自动驾驶感知前沿技术介绍>.在这份报告里,介绍了Waymo在自动驾驶感知中 ...

  2. 刷paper利器!不想打开PDF,这个插件自动帮你转到介绍页

    夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI 你们刷paper的时候,是愿意直接打开PDF,还是想先打开介绍页看看摘要呢? 量子位更喜欢介绍页,一是因为这个页面经常包含更多有用的信息,比 ...

  3. 自动驾驶虚拟仿真测试介绍(1):是什么

    自动驾驶虚拟仿真测试介绍(1):是什么 一.引子 二.自动驾驶汽车的仿真测试的不同手段 三.不同仿真测试手段的选择 " 本系列尝试从是什么.为什么.用什么测.怎么测和谁来测等方面来介绍什么是 ...

  4. 自动驾驶虚拟仿真测试介绍(7):MIL、SIL、PIL和HIL是个啥

    |作者版权所有,未经许可谢绝转载,转载请联系adsimtest@163.com. "本篇介绍下什么是MIL.SIL.PIL和HIL." 一.基于模型的设计 基于模型的设计方法(MB ...

  5. 单节锂电池充放电及外部供电自动切换的电路--原理介绍

    目录 单节锂电池充放电及外部供电自动切换的电路--原理介绍 1)电源输入与输出 2) 虚线左边的电路是充电电路 3) 虚线右侧的电路是自动切换电路 4)元器件的选择 5)PCB设计建议 单节锂电池充放 ...

  6. 优秀的 jQuery 文本输入框自动完成 自动提示插件

    文框输入框的自动完成和自动提示功能可以帮助用户快速的完成操作,是非常好的产品使用体验.这里向大家推荐一款优秀的 jQuery 文本输入框自动完成 & 自动提示插件,帮助你在网站中轻松添加输入框 ...

  7. QQ虎年春节活动ADB自动助手(自动开星星,自动红包雨下拉,自动团圆饭,自动一笔连)

    QQ虎年春节活动ADB自动助手(自动开星星,自动红包雨下拉,自动团圆饭,自动一笔连) 项目地址:GITHUB QQ虎年春节活动ADB助手 可以进去瞧瞧,顺便别忘了:即便是登录也要给我的博客点个赞啊喂! ...

  8. 站长导航系统源码 二开优化 美观自动审核 自动获取网站信息

    介绍: 站长导航系统源码 二开优化 美观自动审核 自动获取网站信息 网盘下载地址: http://www.bytepan.net/7KOqz7bmN33 图片:

  9. set+自动排序+自动去重

    set对插入的元素不仅仅自动去重,还会自动排序 一篇简单介绍set用法的博客 题目链接 #include<cstdio> #include<set> using namespa ...

  10. 实现L3级自动驾驶——自动驾驶产业转折点

    实现L3级自动驾驶--自动驾驶产业转折点 如今,L3自动驾驶受到了前所未有的关注,越来越多的企业开始投入人力物力财力,来钻研L3自动驾驶. 什么是L3级自动驾驶 我们所说的L3级别自动驾驶,通常默认指 ...

最新文章

  1. 那些年让你迷惑的阻塞、非阻塞、异步、同步
  2. 【异步编程】Part3:取消异步操作
  3. 微信小程序 setData动态设置数组中的数据
  4. 【数据库学习笔记】——cursor游标对象
  5. python自动发送邮件不需要发件邮箱_python使用QQ邮箱实现自动发送邮件
  6. 计算机网络之网络概述:1、基本概念
  7. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
  8. Ubuntu18.04下NVIDIA CUDA安装指南和DeepLearning4J GPU配置
  9. 初试 Windows Small Business Server 2003
  10. Charles弱网测试
  11. 关于Canvas 常用API汇总
  12. iOS DevCamp Android DevCamp 课程集锦 为最喜爱的课程投票 获得CSDN社区会员专享特惠票...
  13. ggplot2_coor_xxx()坐标系变换
  14. mybatis的几种锁
  15. 2019年肖秀荣命题人讲真题上下两册【全】
  16. RPL(10):RFC6550翻译(10)---分组转发和环路避免/检测
  17. 计算机连接网络被限制,wifi连接被限制怎么办,教您wifi显示网络受限如何解决
  18. hadoop3.3.0版本搭建
  19. mysql hash索引 btree索引_B-Tree索引与Hash索引的比较
  20. sata及adma控制器linux操作系统驱动的设计与实现,SATA及ADMA控制器Linux操作系统驱动的设计与实现.pdf...

热门文章

  1. 基于双向移位寄存器的彩灯控制电路的设计与实现
  2. MySql数据库索引介绍
  3. 从《后台》找到编辑的落脚点
  4. HTML基础6折叠菜单手风琴菜单
  5. Java 实现 FFT,拿来吧你!
  6. Qt 优化QTreeWidget的三态:勾选,未勾选,半勾选
  7. 施密特触发器的作用以及如何整型
  8. 史上最详细、最良心的MySQL 5.7 + Navicat 下载安装教程(附安装包)
  9. GEE:批量下载NDVI数据,按年最大值合成,GIMMS NDVI from AVHRR Sensors (3rd Generation)
  10. 使用brew安装历史版本的几种方式