1.配置suggest

可实现的输入提示,分为两种 :单词提示 、短语提示。

单词提示使用的字段类型,分析过滤配置如下 :

1 <fieldType class="solr.TextField" name="textSpell" positionIncrementGap="100">
2     <analyzer>
3         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
4         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
5         <filter class="solr.LowerCaseFilterFactory"/>
6     </analyzer>
7 </fieldType>

短语提示使用的字段类型,分析过滤配置如下:

1 <fieldType class="solr.TextField" name="textSpell">
2     <analyzer>
3         <tokenizer class="solr.KeywordTokenizerFactory"/>
4         <filter class="solr.LowerCaseFilterFactory"/>
5     </analyzer>
6 </fieldType>

我这里用的是短语提示,把上面的配置文件,拷贝到 schema.xml 文件的 types 节点里 。

然后在schema.xml 文件的fields节点里,新建一个索引字段,使用上面的短语提示[ textSpell ]。

1 <field name="suggestion" type="textSpell" indexed="true" stored="true"/>

如果我们需要对一个 "关键词"  同时查询多个列,那么我们可以使用CopyField进行列的合并,如下:

1 <copyField source="name" dest="text_autocomplete" maxChars="300" />

其中source 是要拷贝的字段,dest 是要合并到的字段 ,maxChars 是字数限制。

接下来,添加 suggest 的查询接口,在 solrconfig.xml文件里,添加如下:

 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">suggestion</str>
 7      </lst>
 8 </searchComponent>
 9 <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
10      <lst name="defaults">
11           <str name="spellcheck">true</str>
12           <str name="spellcheck.dictionary">suggest</str>
13           <str name="spellcheck.count">10</str>
14      </lst>
15      <arr name="components">
16           <str>suggest</str>
17      </arr>
18 </requestHandler>

其中searchComponent是一个拼写检查的组件, 里面定义的属性信息包括:

name   当前组件的名称,

classname  拼写检查使用的类名,

lookupImpl   绑定这个搜索的对象,目前有两个类可以使用JasperLookup、TSTLookup(第二个效率更高),

field  是schema.xml里的字段名,

requestHandler 是查询接口,在 url 里访问使用的 。

  到这里 , 我们的suggest配置已经完成了, 接下来重启 Tomcat。刚配置好是查不出任何数据的,已经创建好的索引里没有刚配置的索引,这时候需要重新生成索引文件,把新配置的索引给生成数据。我的索引是连接的mysql数据库创建的,那么我需要重新导入一下数据,访问 dataimport?command=full-import,需要访问两次,如果还是不行,则把 {solr_hom}\{multiCore}\conf 目录下的 dataimport.properties 文件删掉 ,重新访问导入数据试试看 。

  导入成功后可以访问select?q=*:* 来查询所有的索引数据,看看新配置的索引是否已经启用,如果没有新配置的索引,则重新执行导入数据创建索引 。

  重新生成索引成功以后,我们访问/suggest?spellcheck.build=true 对查询组件建立索引,然后访问/suggest?q={keyword}进行查询 ,keyword是查询的词语,如果查询不出来数据,访问/suggest?spellcheck.build=true&q={keyword}。如果一切配置正常 , 此时会查询出数据,但是仅仅是匹配查询可以了,并没有返回相近词、匹配结果数等。

2.autocomplete配置

  拿到jquery autocomplete插件所需的所有js文件:jquery.js(1.6+)、jquery.ui.autocomplete.js、jquery.ui.core.js、jquery.ui.menu.js、jquery.ui.position.js、jquery.ui.widge.js。css文件:jquery.ui.css、jquery.ui.autocomplete.css及相应的图片文件。

  建立html文件,在head中导入所需的js、css文件,并加入以下js代码:

...
<script>
$("#tags").autocomplete({source:'default.php',dataType:'jsonp',width:300,multiple:true,matchContains:true,multipleSeparator:" ",error:function(data){alert("error begin");console.log(data);alert("error end");    },success:function(data){var autocompleteData = data.spellcheck.suggestions[1].suggestion+"";var parsed = options.parse && options.parse(autocompleteData) || parse(autocompleteData);cache.add(term,parsed);success(term,parsed); }
});</script>...

其中:source代表自动提示的数据来源,我这儿使用的php。php负责接收用户输入,然后请求solr/suggest获取数据并加工后返回给autocomplete。

转载于:https://www.cnblogs.com/fanelephant/archive/2013/05/11/3072445.html

solr suggest+autocomplete实现自动提示相关推荐

  1. Solr Suggest实现搜索智能提示

    ============== 我的配置 ============ solrconfig.xml   <searchComponent class="solr.SpellCheckCom ...

  2. Solr Suggest智能提示配置说明

    有时候,为了实现如下功能 以满足用户在输入个别单词的时候,能够自动联想提示,这样可以避免用户的冗余输入并提供一定的推荐,从而实现更好的交互效果和内容推广效果.这样的功能有很多实现方式,成熟的Solr其 ...

  3. ElasticSearch7.1 自动提示(suggest)的两种实战做法

    1.需求: 根据用户输入的卖家关键字给用户进行自动提示 2.mapping put caicongyang_seller_name_suggest{"mappings": {&qu ...

  4. [原创]Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)

    做一个小程序要用到Flex文本框自动提示的功能,因为时间不是很紧,所以决定自己动手做这个小组件,花了一个晚上的时间终于完成了.贴出来与大家分享一下. 虽然网上有不少这样的组件,但自己动手做可以锻炼下思 ...

  5. Notepad++ JSON关键字自动提示

    Notepad++关键字自动提示 2017-08-31 目录 1 插件安装 2 往JSON中加关键字 3 智能提示 最近接口测试自动化框架的的case是json格式,用例的json的格式是固定的,定义 ...

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

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

  7. 仿新浪邮件输入自动提示jQuery插件

    一个邮箱提示控件,会自动提示你已经预设的邮箱! /** /** * 邮件输入自动提示插件 * author Newton * $('id').mailTip({ * mails: [], 需要提示的邮 ...

  8. 用jQuery的ajax的功能实现输入自动提示的功能

    注意事项:要使用jQuery首先要把它的包引用进来( <script type="text/javascript" language="javascript&quo ...

  9. ajax 自动提示信息,自动提示使用AJAX

    我想实现自动提示文本box.I已经检查了其他职位似乎没有任何要工作我,我无论是在Web应用程序试图与website.Please在我的代码计算outthe错误英寸当我在文本框中键入字母时,什么都不会发 ...

  10. VSCode(Visual Studio Code) 在Python中,自动提示函数选中后带括号设置

    最近发现VSCode 界面真的很炫,而且占用空间小,只有40多M,启动更是秒开,同时应用商店各种开发调试工具,支持各种语言,简直是开发利器. 最近我在用它Python写Tensorflow和OpenC ...

最新文章

  1. centeos7安装mariadb
  2. CodeForces - 1437E Make It Increasing(确定首尾的最长不下降子序列)
  3. ssl2647-线段树练习4【线段树】
  4. ECCV 2020 大规模实例分割挑战赛(LVIS Challenge)冠军方案
  5. 【HUAWEI Mate30】抽奖啦!华为IoT新福利上线!
  6. 缓存穿透、缓存击穿、缓存雪崩概述缓存一致性的解决方案
  7. SAP License:如何利用DEBUG强力修改表(暴力破解)
  8. 禾川Q1系列PLC官方教程
  9. python如何抓取网页里面的文字_如何利用python抓取网页文字、图片内容?
  10. MATLAB与STK互联10:卫星对象操作(2)—卫星轨道参数设置(方法1,通过轨道生成器设置实现)
  11. 编写函数swap实现两个数据的互换,形参分别指针和引用
  12. 200+款神器,全网最好用的免费在线工具,都在这里了!
  13. java实现交集并集差集
  14. 数理逻辑 形式可推演与逻辑推论
  15. Tarena代码-一些代码碎片
  16. 关于编译型语言函数的调用(一)
  17. mybatis从入门到精通(刘增辉著)-读书笔记第五章
  18. 2022 199管综真题及答案解析
  19. 为什么监控显示没有连接服务器,为什么看幼儿园监控就显示连接检验服务失败请 – 手机爱问...
  20. 除了编程语言本身,你如果还懂这 7 点,绝对可以在北上深杭拿到 20k

热门文章

  1. 设计模式---工厂方法模式(c++实现)
  2. XMLHttpRequest发送POST请求
  3. 【渝粤教育】国家开放大学2018年春季 0100-22T程序设计基础 参考试题
  4. 23种设计模式(二十三)行为变化之访问器
  5. 几种简单的垂直居中方式
  6. php object
  7. C++标准库bitset类型(简单使用方法)
  8. 使用showInputDialog显示输入框
  9. [转]老婆还是自己好
  10. [转]vc6.0安装boost1.34.1