solr 实现拼音匹配

最近实现了一个拼音检索

                向大家介绍一下

             1.用solr suggest自动匹配 在 solrconfig.xml添加这样配置

           <searchComponent name="suggest"  class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">string</str><!--2012-03-27-->
  <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">text</str>
  <float name="threshold">0.005</float>
  <str name="buildOnCommit">true</str>
  <str name="comparatorClass">freq</str>
  <str name="sourceLocation">../dic/dict.txt</str>   ----拼音词库地址
  </lst>
  </searchComponent>  

  <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
  <lst name="defaults">
  <str name="spellcheck">true</str>
  <str name="spellcheck.dictionary">suggest</str>
  <str name="spellcheck.onlyMorePopular">true</str>
  <str name="spellcheck.count">10</str>
  <str name="spellcheck.collate">true</str>
  </lst>
  <arr name="components">
  <str>suggest</str>
 </arr>
 </requestHandler>


二  调用

/**
     * <p> 方法名:suggester </p>
     * <p> 功能:用于自动搜索,拼音查询查询匹配相近关键字</p>
     * <p> 作者:陈佳 </p>
     * <p> 编写日期:2011-12-12</p>
     * <p> 查询参数:parame </p>
     */
    public JSONObject suggester(String preste){
        List list=new ArrayList<String>();
        String bsString=cp.intercepted(preste);
        SolrQuery q = new SolrQuery().setQueryType("/suggest").setQuery(bsString);
        QueryResponse queryResponse;
        JSONArray arr=new JSONArray();
    
        JSONObject json = new JSONObject();
        try {

            log.info(q);
            queryResponse = ad.solrServer.query(q);
            try {
                List tags =(List) ((NamedList) ((NamedList) ((NamedList)queryResponse.getResponse().get("spellcheck")).get("suggestions")).get(bsString)).get("suggestion");
                  for(int i=0;i<tags.size();i++){
                      JSONObject obj=new JSONObject();
                      String [] bStrings=tags.get(i).toString().split(" ");
                      Map<String, String> map=    queryCount(bStrings[1].toString());
                      obj.put("name", bStrings[1]);
                      obj.put("count",map.get("count"));
                      arr.put(obj);
                  }
                  json.put("flag", "1");
                  json.put("resp_data", arr);
//                  json.put("value", preste);
            } catch (Exception e) {
                json.put("flag", "0");
                return json;
            }
    
        } catch (Exception e) {
             e.printStackTrace();
             log.info(e+"Search类中的|suggester()|查询失败");
             return json;
        }
        return json;
    
        
    }


    



转自:http://blog.csdn.net/chenjia3615349/article/details/8112149
2019-03-27 01:19

知识点

相关教程

更多

solr之对拼音搜索和拼音首字母搜索的支持

对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢?   实现方式有2种,但是他们其实是对应的。   1.用lucene实现。   1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段。合并的一个字段。   (拼音和拼音首字母,可以通过pinyin4j.jar。将想要进行拼音搜索的字段进行拼音转换。)   2.对输入的参数判断是否是拼音,(

solr返回部分匹配结果

这里的“部分匹配”,是指返回的结果没有完全匹配所有搜索的关键词。 DisMaxQParserPluign里有一个参数mm(Minimum 'should' match),设置整个搜索关键词中最小需要匹配的数量。这里给出例子   "2" : 无论关键词一共有多少,doc最少需要匹配2个 "75%" : doc最少需要匹配75%的关键词,关键词个数向下取整。 &

solr使用方法 完全匹配

最近一直被solr的搜索困扰,搜索汉字时不能搜索出自己想要的内容,经过研究和查询发现,问题出在没有完全匹配上,主要还是对solr使用不太熟练。 解决方法:以前UserRealname:某某家长,这样搜索出使用问题的,改为UserRealname:"某某家长" 外面加上双引号,必须是双引号。就OK了。 转自:http://www.cnblogs.com/zhja/p/372992

solr4.7开发实践 4——拼音检索

拼音检索的大致思路是这样的: ①将需要使用拼音检索的字段汇集到一个拼音分词字段里(我的拼音分词字段使用pinyin4j+NGram做的); 加入两个jar包:pinyin4j-2.5.0.jar、pinyinAnalyzer.jar; schema.xml文件设置: <fieldname="pinyin"type="text_pinyin"indexe

Solr总结

http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 1. Solr 是什么?  Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的

solr

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 Solr优点: (1)Solr 可以对几乎任何对象进行

solr

提供检索服务,从数据库提取字段并建立索引,检索效率比直接查库高。        服务端安装配置    下载http://labs.renren.com/apache-mirror/lucene/solr/3.6.0/apache-solr-3.6.0.zip  复制并配置tomcat:给Connector添加属性URIEncoding="UTF-8";也可以配置自带的jetty

通过对QParser类的继承 实现SOLR 半匹配检索(模糊搜索/模糊检索) (一)

在SOLR应用中,需要支持对指定关键词部分匹配的应用场景 如何实现SOLR的模糊检索(半匹配)? 何谓模糊检索(半匹配): 这种方式是生产环境下经常要使用到的检索方式,通过对命中请求关键词分词后的一个或多个词元的进行检索方式叫做半匹配或模糊匹配,(注意: 这里要与SOLR检索运算符“~” 检索方式区分开)。 如用户输入关键词:战争人,但是索引库里收录只有“战争之人”,这时如果输入: name:战争

通过对QParser类的继承 实现SOLR 半匹配检索(模糊搜索/模糊检索) (一)

在SOLR应用中,需要支持对指定关键词部分匹配的应用场景 如何实现SOLR的模糊检索(半匹配)? 何谓模糊检索(半匹配): 这种方式是生产环境下经常要使用到的检索方式,通过对命中请求关键词分词后的一个或多个词元的进行检索方式叫做半匹配或模糊匹配,(注意: 这里要与SOLR检索运算符“~” 检索方式区分开)。 如用户输入关键词:战争人,但是索引库里收录只有“战争之人”,这时如果输入: name:战争

文档相似性匹配

1.TF-IDF简介 中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。   TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他

Apache Solr3.4应用实践(高亮 拼写检查 匹配相似)

Solr 是基于lucene的检索服务器。能够很快的搭建检索服务,并且提供的很多实用的组件。例如高亮(highlight)、拼写检查(spellCheck)和匹配相位(moreLikeThis)。下面我将在我工作中接触到的一些实践与大家分享。(我当前使用的solr 版本是 3.4,使用tomcat 7.0.21) (如果你也使用的是 tomcat 服务器,而且查询请求包含中文的话,还需要修改 TO

Solr调研总结

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示、拼写检查、搜索建议、分组统计、拼音检索等功能的使用方法。 版本 作者/修改人 日期 V1.0 gzk 2013-06-04   Solr 是什么?  Solr它是一种开放源码

安装solr

转载请注明出处:http://lucien-zzy.iteye.com/blog/2002087 这篇文章讲解了哪儿些功能的实现呢? 第一:能通过http://localhost:7080/solr/ 正常访问solr,介绍三种solr/home的配置方式(这里用JNDI方式实现)分别为:基于JNDI、基于当前路径、基于环境变量的方式 第二:实现三种中文分词器的安装,包括:smartcn 分词器、

深入Solr实战

solr为我们提供便捷的全文检索服务,查询标准,更新容易,部署方便.我们来介绍一下如何更好的使用solr来为我们服务  新建solr服务   新建solr服务时,需要大家提供以下信息:       servicename   预计查询、更新频率   多少文档数,每个文档有多少field,field的类型,有多少field是store的   常用查询语句    servicename是提供solr服

solr简介(一)

第一章  Solr 简介 本章速览: ·搜索引擎处理的数据特性 ·常见搜索引擎用例 · Solr 核心模块介绍 ·选择 Solr 的理由 ·功能概述 伴随着社交媒体、云计算、移动互联网和大数据等技术的高速发展,我们正迎来一个令人激动的计算时代。软件架构师们开始面对的主要挑战之 一,便是如何处理全球巨大的用户基数所产生及使用的海量

最新教程

更多

java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

HttpClient 上传文件

我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案