solr ik关键词solr5.3 ik 分词配置有多个空格

后使用快捷导航没有帐号?
查看: 194|回复: 2
ElasticSearch多个字段分词查询高亮显示
论坛徽章:34
ElasticSearch多个字段分词查询高亮显示
public List&NewsInfo& searcher2(String key, String indexId, String type) {
& && &&&List&NewsInfo& newsInfos= new ArrayList&NewsInfo&();
& && &&&try {
& && && && &// 创建查询索引,参数productindex表示要查询的索引库为productindex
& && && && &SearchRequestBuilder searchRequestBuilder = client
& && && && && && &&&.prepareSearch(indexId);
& && && && &// 设置查询索引类型,setTypes(&productType1&, &productType2&,&productType3&);
& && && && &// 用来设定在多个类型中搜索
& && && && &searchRequestBuilder.setTypes(type);
& && && && &// 设置查询类型 1.SearchType.DFS_QUERY_THEN_FETCH = 精确查询 2.SearchType.SCAN
& && && && &// = 扫描查询,无序
& && && && &searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
& && && && &// 设置查询关键词
//& && && & searchRequestBuilder
//& && && && && && &.setQuery(QueryBuilders.boolQuery().should(QueryBuilders.termQuery(&title&, key))
//& && && && && && && && &&&.should(QueryBuilders.termQuery(&content&, key)));
& && && && &QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(key);
& && && && &queryBuilder.analyzer(&ik_smart&);
& && && && &queryBuilder.field(&title&).field(&content&);
& && && && &searchRequestBuilder.setQuery(queryBuilder);
& && && && &// 分页应用
& && && && & searchRequestBuilder.setFrom(1).setSize(3000);
& && && && &// 设置是否按查询匹配度排序
& && && && &searchRequestBuilder.setExplain(true);
& && && && &// 按照字段排序
& && && && &searchRequestBuilder.addSort(&publish_time&, SortOrder.DESC);
& && && && &// 设置高亮显示
& && && && &searchRequestBuilder.addHighlightedField(&title&);
& && && && &searchRequestBuilder.addHighlightedField(&content&);
& && && && &searchRequestBuilder
& && && && && && &&&.setHighlighterPreTags(&&span style=\&color:red\&&&);
& && && && &searchRequestBuilder.setHighlighterPostTags(&&/span&&);
//& && && & searchRequestBuilder.setHighlighterPreTags(&&em&&);
//& && && & searchRequestBuilder.setHighlighterPostTags(&&em&&);
& && && && &// 执行搜索,返回搜索响应信息
& && && && &SearchResponse response = searchRequestBuilder.execute()
& && && && && && &&&.actionGet();
& && && && &// 获取搜索的文档结果
& && && && &SearchHits searchHits = response.getHits();
& && && && &SearchHit[] hits = searchHits.getHits();
& && && && &// ObjectMapper mapper = new ObjectMapper();
& && && && &for (int i = 0; i & hits. i++) {
& && && && && & SearchHit hit = hits[i];
& && && && && & // 将文档中的每一个对象转换json串值
& && && && && & String json = hit.getSourceAsString();
& && && && && & // 将json串值转换成对应的实体对象
& && && && && & NewsInfo newsInfo = JsonUtils
& && && && && && && && &.readToObject(json, NewsInfo.class);
& && && && && & // 获取对应的高亮域
& && && && && & Map&String, HighlightField& result = hit.highlightFields();
& && && && && & // 从设定的高亮域中取得指定域
& && && && && & HighlightField titleField = result.get(&title&);
& && && && && & if (titleField !=null) {
& && && && && && &&&// 取得定义的高亮标签
& && && && && && &&&Text[] titleTexts = titleField.fragments();
& && && && && && &&&// 为title串值增加自定义的高亮标签
& && && && && && &&&String title = &&;
& && && && && && &&&for (Text text : titleTexts) {
& && && && && && && && &title +=
& && && && && && &&&}
& && && && && && &&&newsInfo.setTitle(title);
& && && && && & }
& && && && && & // 从设定的高亮域中取得指定域
& && && && && & HighlightField contentField = result.get(&content&);
& && && && && & if (contentField !=null) {
& && && && && && &&&// 取得定义的高亮标签
& && && && && && &&&Text[] contentTexts = contentField.fragments();
& && && && && && &&&// 为title串值增加自定义的高亮标签
& && && && && && &&&String content = &&;
& && && && && && &&&for (Text text : contentTexts) {
& && && && && && && && &content +=
& && && && && && &&&}
& && && && && && &&&// 将追加了高亮标签的串值重新填充到对应的对象
& && && && && && &&&newsInfo.setContent(content);
& && && && && & }
& && && && && & newsInfos.add(newsInfo);
//& && && && &&&System.out.println(newsInfo.toString());
& && && && && & // 打印高亮标签追加完成后的实体对象
& && && && &}
& && && && &// 防止出现:远程主机强迫关闭了一个现有的连接
//& && && & Thread.sleep(10000);
& && &&&} catch (Exception e) {
& && && && &// TODO: handle exception
& && && && &e.printStackTrace();
& && &&&}
& && &&&return newsI
& & }复制代码
注册会员, 积分 64, 距离下一级还需 136 积分
论坛徽章:3
多谢楼主无私分享,学习了
新手上路, 积分 45, 距离下一级还需 5 积分
论坛徽章:0
感觉说的有点泛泛,不同的NoSQL数据库的特点还是差异很大的。
扫一扫加入本版微信群solr 4.0 集成 IK Analyzer 中文分词 - 百行孝为先,万恶懒为首
- ITeye技术网站
博客分类:
环境
jdk 1.7
tomcat1.7
solr 4.10
IK Analyzer 2012FF_hf1.zip
solr的下载
官网
下载:
IK Analyzer下载 (找个免费 VPN 翻)
google Code:
尤其要注意 IK Analyzer 支持的 solr 版本
我们这里下载 IK Analyzer 2012FF_hf1.zip
部署solr到tomcat中
//1.修改tomcat 的编码格式
C:\Tomcat 6.0\conf\server.xml
URIEncoding="UTF-8"
&Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" /&
//2.拷贝 E:\solr\apache-solr-3.6.2\example\webapps\solr.war 到 C:\Tomcat 6.0\webapps
//3.配置solr.home
C:\Tomcat 6.0\conf\Catalina\localhost 新建 solr.xml
&?xml version="1.0" encoding="UTF-8"?&
&Context docBase="C:\Tomcat 6.0\webapps\solr.war" debug="0" crossContext="true"&
&Environment name="solr/home" type="java.lang.String" value="E:\solr\apache-solr-3.6.2\example\solr" override="true"/&
&/Context&
//3.5配置 solr.home 的 方法二
修改 solr.war 中的
添加 如下配置 也可以(一般web.xml中已经包含了只需取消注释就可以了)
&env-entry&
&env-entry-name&solr/home&/env-entry-name&
&env-entry-value&E:\solr\apache-solr-3.6.2\example\solr&/env-entry-value&
&env-entry-type&java.lang.String&/env-entry-type&
&/env-entry&
然后重新打包
将 解压后的sole.war
重新打包部署
//4.启动 tomcat就 然后 访问 http://localhost:8080/solr/admin
//5 进入控制台
"*:*" 查询所有 文档
这个 可以在
E:\solr\apache-solr-3.6.2\example\solr\conf\solrconfig.xml 中 修改
&defaultQuery&*:*&/defaultQuery&
一般 不建议修改
集成 IK Analyzer 2012FF_hf1
IKAnalyzer2012FF_u1.jar 到 tomcat/webappa/solr/web-inf/lib
// 复制 IKAnalyzer.cfg.xml 和 stopword.dic 到上面配置的 solr/home/solr/core0/conf/
或者 到 \example\solr\core0\conf 下面
打开 \example\solr\core0\conf 或者 solr/home/solr/core0/conf/ 下面的schema.xml 配置文件
在 &types&下加入
&!-- IK Analyzer--&
&fieldType name="text_ik" class="solr.TextField"&
&analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/&
&/fieldType&
&fields& 中加入
&field name="text" type="text_ik" indexed="true" stored="false" multiValued="false"/&
重启 tomcat 然后访问
http://localhost:8983/solr/#/core0/analysis
浏览: 870403 次
来自: 上海
这个挺好JavaScript实现input输入框控件只允许输入 ...
东西太好啦受教啊
naiyizute 写道编码表好像不全,能提供全一点的吗htt ...
你这个 EmojiConverter 是来自这里吧,一个日本人 ...
写的真好,根据这篇搭建文章,我自己整理了一下,完整的包和可以在 ...1、在solr的web中:\WEB-INF目录下新增一个文件夹:classes
2、新增一个文件:IKAnalyzer.cfg.xml
&span style=&font-size:18&&&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE properties SYSTEM &/dtd/properties.dtd&&
&properties&
&comment&IK Analyzer 扩展配置&/comment&
&!--用户可以在这里配置自己的扩展字典 my.dic即为扩展分词库,分词库可以为多个,以分号隔开即可。停止词库一样--&
&entry key=&ext_dict&&my.&/entry&
&!--用户可以在这里配置自己的扩展停止词字典--&
&entry key=&ext_stopwords&&stopword.&/entry&
&/properties&&/span&
3、classes下新增my.dic文件。文件格式必需是:无BOM的UTF-8格式,示例内容为:
&span style=&font-size:18&&么么哒&/span&
4、classes下新增文件stopword.dic。文件格式必需是:无BOM的UTF-8格式,示例内容为:
&span style=&font-size:18&&即使
如果&/span&
5、保存,重启solr,测试结果如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18813次
排名:千里之外
原创:12篇
转载:10篇
(5)(9)(2)(6)25647人阅读
ik-analyzer
solr(11)
solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器。
一、版本信息
solr版本:4.7.0
需要ik-analyzer版本:IK Analyzer 2012FF_hf1
ik-analyzer下载地址:
二、配置步骤
下载压缩解压后得到如下目录结构的文件夹:
我们把IKAnalyzer2012FF_u1.jar拷贝到solr服务的solr\WEB-INF\lib下面。
我们把IKAnalyzer.cfg.xml、stopword.dic拷贝到需要使用分词器的core的conf下面,和core的schema.xml文件一个目录。
修改core的schema.xml,在&types&&/types&配置项间加一段如下配置:
&fieldType name=&text_ik& class=&solr.TextField&&
&analyzer class=&org.wltea.analyzer.lucene.IKAnalyzer&/&
&/fieldType&我们就多了一种text_ik的field类型了,该类型使用的分词器就是。
我们在这个core的schema.xml里面配置field类型的时候就可以使用text_ik了。
&field name=&name&
type=&text_ik&
indexed=&true&
stored=&true&
multiValued=&false& /&
三、中文分词测试
中华人民共和国
[e4 b8 ad e5 8d 8e e4 ba ba e6 b0 91 e5 85 b1 e5 92 8c e5 9b bd]
[e4 b8 ad e5 8d 8e e4 ba ba e6 b0 91]
[e4 b8 ad e5 8d 8e]
[e5 8d 8e e4 ba ba]
人民共和国
[e4 ba ba e6 b0 91 e5 85 b1 e5 92 8c e5 9b bd]
[e4 ba ba e6 b0 91]
[e5 85 b1 e5 92 8c e5 9b bd]
[e5 85 b1 e5 92 8c]
[e5 9b bd]
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:522278次
积分:4738
积分:4738
排名:第4833名
原创:99篇
转载:37篇
评论:147条
(3)(3)(3)(1)(3)(2)(1)(2)(2)(4)(2)(2)(1)(1)(3)(2)(2)(3)(4)(2)(2)(1)(5)(6)(19)(2)(6)(2)(4)(8)(6)(1)(1)(1)(4)(1)(2)(1)(2)(2)(1)(3)(1)(2)(5)(2)(1)现在的位置:
solr添加中文IK分词器,以及配置自定义词库
Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。
solr默认是不支持中文分词的,这样就需要我们手工配置中文分词器,在这里我们选用IK Analyzer中文分词器。
IK Analyzer下载地址:/p/ik-analyzer/downloads/list
默认大家已经下载并解压了solr,在这里我们使用solr 4.10.4版本
试验环境centos 6.5 ,JDK1.7
1:解压下载的IK Analyzer_2012_FF_hf1.zip压缩包,把IKAnalyzer2012FF_u1.jar拷贝到solr-4.10.4/example/solr-webapp/webapp/WEB-INF/lib目录下
2:在solr-4.10.4/example/solr-webapp/webapp/WEB-INF目录下创建目录classes,然后把IKAnalyzer.cfg.xml和stopword.dic拷贝到新创建的classes目录下即可。
3:修改solr core的schema文件,默认是solr-4.10.4/example/solr/collection1/conf/schema.xml,添加如下配置
&fieldType name="text_ik" class="solr.TextField"&
&!--索引时候的分词器--&
&analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/&
&!--查询时候的分词器--&
&analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/&
&/fieldType&
4:启动solr,bin/solr start
5:进入solr web界面http://localhost:8983/solr,看到下图操作结果即为配置成功
到现在为止,solr就和IK Analyzer中文分词器整合成功了。
但是,如果我想自定义一些词库,让IK分词器可以识别,那么就需要自定义扩展词库了。
操作步骤:
1:修改solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes目录下的IKAnalyzer.cfg.xml配置文件,添加如下配置
&entry key="ext_dict"&ext.&/entry&
2:新建ext.dic文件,在里面添加如下内容(注意:ext.dic的编码必须是Encode in UTF-8 without BOM,否则自定义的词库不会被识别)
3:重启solr
4:在solr web界面进行如下操作,看到图中操作结果即为配置成功。
更多精彩内容请访问:
关注超人学院微信二维码:
EasyQuery的目标是不需要写一行java代码就可以实现非常非常复杂的查询,省时省力,提高效率。
【上篇】【下篇】
您可能还会对这些文章感兴趣!
籍贯山东,落户北京,IT行业。
工作经历:
2014年至今&,自主创业
,传智播客
,超人学院
,亚信科技
教育经历:
,中科院研究生院
,河北大学}

我要回帖

更多关于 solr ik 分词配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信