电商搜索中要实现这么一块功能,当输入文字时候。下拉框提示。类似于百度搜索

在师出名门的基于lucene的solr搜索引擎中。提供了 拼写检查和智能提示这块功能。

  拼写检查就是用来检查用户输入的检索内容是否存在,假设不存在则,给它提示出相近,或相似的内容。

  而检索建议则是用户输入某个检索条件后。会立马友好的给出一系列提示内容,并推荐首个出现的相似的词,作为推荐词。

也就是说 拼写检查是能够作为一个单独功能使用,但suggest一般引用拼写检查组件

实现过程。配置solrconfig.xml

  <searchComponent name="suggest" class="solr.SpellCheckComponent">
<!-- <str name="queryAnalyzerFieldType">text_general</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">article</str>
<float name="threshold">0.0001</float>
<!-- 使用自己定义suggest词库词能够将例如以下两行的凝视取消
<str name="sourceLocation">suggest.txt</str>
<str name="spellcheckIndexDir">spellchecker</str>
-->
<str name="comparatorClass">freq</str>
<str name="buildOnOptimize">true</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.count">11</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.collate">true</str>
<!--<str name="spellcheck.build">true</str> -->
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>

重新启动solr服务。运行solrjclient代码

	/**
* @method: spellcheck
* @Description: 智能提示 Solr里叫做Suggest模块
*/
public static List<Map<String, String>> suggest(String word,String corename) {
SolrServer server=Indexer.getHttpSolrServer(corename);
List<Map<String, String>> wordList = new ArrayList<Map<String, String>>();
try {
SolrQuery query = new SolrQuery();
query.set("q", word);// 查询的词
query.set("qt", "/suggest");// 请求到suggest中
// query.set("spellcheck.count", "");// 返回数量
QueryResponse rsp = server.query(query); // 上面取结果的代码
SpellCheckResponse re = rsp.getSpellCheckResponse();// 获取拼写检查的结果集
if (re != null) {
for (Suggestion s : re.getSuggestions()) {
List<String> list = s.getAlternatives();// 获取全部 的检索词
for (String spellWord : list) {
Map<String, String> map = new HashMap<String, String>();
map.put("code", spellWord);
wordList.add(map);
}
}
// String t = re.getFirstSuggestion(word);// 获取第一个推荐词
}
} catch (Exception e) {
e.printStackTrace();
}
return wordList;
}

前端简单效果图:

智能提示(一) Solr (suggest)的更多相关文章

  1. solr suggest智能提示配置

    目录 配置文件 Java代码 遇到的问题 回到顶部 配置文件 solrconfig.xml <searchComponent name="suggest" class=&qu ...

  2. 搜索引擎keyword智能提示的一种实现

    问题背景 搜索关键字智能提示是一个搜索应用的标配.主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户搜索体验. 美团CRM系统中存在数以百万计的商家,为了让用户高速查找到目标 ...

  3. winform下的智能提示框

    winform下的智能提示框 最近在搞winform的程序,接触到有些可能以后还会用到的功能,所以写到博客园里去,第一可以加深自己的印象,第二可以在以后再遇到同样问题的时候忘记了可以马上回来看看,第三 ...

  4. jquery php 百度搜索框智能提示效果

    这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有须要的朋友能够下载測试哦. 代码例如以下 index.html文件,保保存成index.htm <!DOCT ...

  5. Solr Suggest组件的使用

    使用suggest的原因,最主要就是相比于search速度快,In general, we need the autosuggest feature to satisfy two main requi ...

  6. Eclipse代码和xml文件的智能提示

    一.代码智能提示 Windows → Preferences → Java→ Editor → Content Assist 将 Auto activation delay(ms): 改为 0 将 A ...

  7. Laravel 安装代码智能提示扩展「laravel-ide-helper」

    ========================laravel-ide-helper======================== 使用 Laravel 框架IDE居然没有智能提示?这感觉实在太糟糕 ...

  8. 利用typescript使backbone强类型智能提示

    模型类一旦多了没有强类型和智能提示是相当痛苦的,所以. 仅仅用ts定义一个模型类: class Person extends Backbone.Model { defaults = { Name:&q ...

  9. Visual Studio Code 智能提示文件

    Visual Studio Code 开发前端和node智能提示 visual studio code 是一个很好的编辑器,可以用来编写前端代码和nodejs. 我很喜欢使用VSC,现在流行框架对VS ...

随机推荐

  1. HDU 5649.DZY Loves Sorting-线段树+二分-当前第k个位置的数

    DZY Loves Sorting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Oth ...

  2. POJ 1833 排列【STL/next_permutation】

    题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 ...

  3. Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程

    BOOTP-TFTP-FTP 目录 文件传输流程 服务器建立过程 客户端建立过程 1 文件传输流程 / File Transfer Flow 利用BOOTP,TFTP,FTP三种传输协议,建立起客户端 ...

  4. HDU6380 2018 “百度之星”程序设计大赛 - 初赛(B) A-degree (无环图=树)

    原题地址 degree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  5. POJ1273 Drainage Ditches (网络流)

                                                             Drainage Ditches Time Limit: 1000MS   Memor ...

  6. oracle Update a table with data from another table

    UPDATE table1 t1 SET (name, desc) = (SELECT t2.name, t2.desc FROM table2 t2 WHERE t1.id = t2.id) WHE ...

  7. #请用索引取出下面list的指定元素:

    #!/usr/bin/python # -*- coding: utf-8 -*- L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python', ...

  8. ACM的奇计淫巧系列

    突然想写个系列,算是总结总结集训中遇到的各种黑科技吧,这是目录 ACM的奇计淫巧_输入挂 ACM的奇计淫巧_扩栈C++/G++ ACM的奇计淫巧_bitset优化

  9. iOS 自定义字体设置

    有时候客户都要求使用方正兰亭刊黑字体,可是iOS没有自带这个字体,肿么办 ,只能自己自定义字体了,下面是自定义字体的几个重要步骤: 1.下载字体资源文件(.ttf或.otf格式的文件) 比如说你要使用 ...

  10. SQL的连接(外连接、内连接、交叉连接和自连接)

    在查询多个表时,我们经常会用到连接查询,连接是关系型数据库的主要特点,也是它区别于其他类型的数据库管理系统的一个标志. 一.什么是连接查询 连接查询:根据两个表或者多个表的列之间的关系,来从这些表中查 ...