热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr第一弹autocomplete(自动补全)

         百度和google中都有文字的自动补全功能,以前项目中也用过实现思路非常简单一般就是extjs或者jquery的前台插件通过异步加载数据然后显示,         现在项目的

 

         百度和google中都有文字的自动补全功能,以前项目中也用过实现思路非常简单一般就是extjs 或者jquery 的前台插件通过异步加载数据然后显示,

          现在项目的数据源是基于solr所以只有使用solr的autocomplete功能,搜索了很多无数百度上的网页根本没有关于solr的自动补全的功能实现,就连关于solr应用性的文章也是比较少的,无奈只好在google上搞了,全都是英文的,尝试了很多的方法都不能使用最后发现是solr api的问题国外的大部分资料都是用得这个写法

private List query(String q, int limit) {
List items = null;
CommonsHttpSolrServer server = null;

try {
server = new CommonsHttpSolrServer("http://localhost:8983/solr");
} catch(Exception e) { e.printStackTrace(); }

// escape special characters
SolrQuery query = new SolrQuery();
query.addTermsField("spell");
query.setTerms(true);
query.setTermsLimit(limit);
query.setTermsLower(q);
query.setTermsPrefix(q);
query.setQueryType("/terms");

try {
QueryResponse qr = server.query(query);
TermsResponse resp = qr.getTermsResponse();
items = resp.getTerms("spell");
} catch (SolrServerException e) {
items = null;
}

return items;
}

 但是不知道是人品问题还是怎么的,我下载的solr1.4  SolrQuery类根本就没有这个addTermsField 和setTermsPrefix 方法,

这是我的下载地址http://mirror.nus.edu.sg/apache//lucene/solr/1.4.1/

 

solr实现autocomplete功能其实非常简单,仅仅需要下边的这个url就可以实现

fl=id,name&rows=0&q=*:*&facet=true&facet.field=name_auto&facet.mincount=1&facet.prefix=input

 我们所要做的就是用solrj的api拼装成这个字符串请求tomcat就ok了

下面是拼装代码

CommonsHttpSolrServer service = new CommonsHttpSolrServer(
"http://localhost:8080/solr/targetCore");
List list = new ArrayList();
QueryResponse queryRespOnse= new QueryResponse();
SolrQuery query = new SolrQuery();
// fl=id,name&rows=0&q=*:*&facet=true&facet.field=searchText&facet.
// mincount=1&facet.prefix=sony
//facet=true&rows=0&fl=id%2Cname&facet.prefix=sony&facet.field=searchText
try {
query.setFacet(true);
query.setRows(0);
query.setQuery("*:*");
query.setFacetPrefix("sony");
query.addFacetField("searchText");
System.out.println(query.toString());
queryRespOnse= service.query(query, METHOD.POST);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

  返回的内容如下



 searchText 中的以sony开头的词都是自动补全的结果,其实这些都是lucene中的term

 

下边代码使用solrj的api解析文本的过程

CommonsHttpSolrServer service = new CommonsHttpSolrServer(
"http://localhost:8080/solr/targetCore");
List list = new ArrayList();
QueryResponse queryRespOnse= new QueryResponse();
SolrQuery query = new SolrQuery();
// fl=id,name&rows=0&q=*:*&facet=true&facet.field=searchText&facet.
// mincount=1&facet.prefix=sony
//facet=true&rows=0&fl=id%2Cname&facet.prefix=sony&facet.field=searchText
try {
query.setFacet(true);
query.setRows(0);
query.setQuery("*:*");
query.setFacetPrefix("索尼");
query.addFacetField("searchText");
System.out.println(query.toString());
queryRespOnse= service.query(query, METHOD.POST);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
NamedList nl = queryResponse.getResponse();

NamedList nl2 = (NamedList) nl.get("facet_counts");
NamedList nl3 = (NamedList) nl2.get("facet_fields");
NamedList nl4 = (NamedList) nl3.get("searchText");
System.out.println(nl4.size());
Iterator> it = nl4.iterator();
while (it.hasNext()) {
Entry entry = it.next();
System.out.println(entry.getKey() + "____" + entry.getValue());
}

SolrDocumentList results = queryResponse.getResults();

SolrResult solrResult = new SolrResult();
  • 大小: 13.7 KB
  • 查看图片附件

推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
    一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer1.新建一个测试Lucene提供的分词器的maven项目LuceneAnal ... [详细]
  • 1.0为什么要做这个博客站?  在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了。而且下次再点击这个书签时,可能就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效。这样一来,也就不方便 ... [详细]
  • 标题: ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
author-avatar
手机用户2502913123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有