一.配置solr

1.配置

注意:要是想放到其它路径下,可以修改此路径下的web.xml配置文件

修改内容如下:

<!-- 将solrhome的绝对路径写入env-entry-value -->

<env-entry>

<env-entry-name>solr/home</env-entry-name>

<!--例如:E:/search11/solr/server/solr-->

<env-entry-value>你的core的上级路径</env-entry-value>

<env-entry-type>java.lang.String</env-entry-type>

</env-entry>

2.点击tomcat的bin目录下的startup.bat启动

3.在浏览器上输入http://你的ip:8080/solr/index.html#/ 查看

4.选择test-core,执行查看

二.配置HanLP分词器

1. 配置配置文件

从下载的HanLP中获取hanlp.properties配置文件,放置到下面的路径中。

2. 导入HanLP词典

从下载的HanLP中拷贝data到下图目录下,该data包含Hanlp中提供的词库和模型。

3. 导入jar包

把HanLP中的hanlp-1.5.0.jar和hanlp-1.5.0.sources.jar放到tomcat的该目录下

4. 修改hanlp.properties中的改成data的上级目录

一、配置HanLP分词器

1.配置分词器

在使用该分词器的core中的managed-schema文件中添加

<fieldType name="text_cn" class="solr.TextField">

<analyzer type="index">

<tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory"

enableIndexMode="true" enablePlaceRecognize="true" enableOrganizationRecognize="true"  customDictionaryPath="E:\search11\data\dictionary\custom\自定义词典.txt"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

<filter class="solr.LowerCaseFilterFactory"/>

</analyzer>

<analyzer type="query">

<!-- 切记不要在query中开启index模式 -->

<tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory"

enableIndexMode="false"  enablePlaceRecognize="true" enableOrganizationRecognize="true" customDictionaryPath="E:\search11\data\dictionary\custom\自定义词典.txt"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"

ignoreCase="true" expand="true"/>

<filter class="solr.LowerCaseFilterFactory"/>

</analyzer>

</fieldType>

2.修改使用该分词器的字段

3.结果

三.配置Tika文档提取器

1. 首先在core中添加tika文档搜索

<requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler" startup="lazy">

<lst name="defaults">

<!-- All the main content goes into "text"... if you need to return

the extracted text or do highlighting, use a stored field. -->

<str name="fmap.content">text</str>

<str name="lowernames">false</str>

<str name="uprefix">ignored_</str>

<!-- capture link hrefs but ignore div attributes -->

</lst>

</requestHandler>

2. 配置tika解析文档的分类字段

<!-- Tika字段 -->

<field name="PK" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

<field name="BT" type="string" indexed="true" stored="true" termVectors="true" multiValued="false"/>

<field name="ZZ" type="string" indexed="true" stored="true"  multiValued="true"/>

<field name="NR" type="text_cn" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>

<field name="CJSJ" type="date" indexed="true" stored="true" />

3. 修改tomcat的server.xml配置

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

maxHttpHeaderSize ="104857600" maxPostSize="0" />

注意:

maxHttpHeaderSize :设置最大上传头大小

maxPostSize:解除post提交大小限制

4. 结果

四.配置HTML及相关样式过滤器

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

<analyzer type="index">

<tokenizer class="solr.StandardTokenizerFactory"/>

<!-- 清除\n样式 -->

<charFilter class="solr.MappingCharFilterFactory"

mapping="mapping-FoldToASCII.txt"/>

<charFilter class="solr.HTMLStripCharFilterFactory"/><!-- 清除HTML样式 -->

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

<filter class="solr.LowerCaseFilterFactory"/>

</analyzer>

<analyzer type="query">

<tokenizer class="solr.StandardTokenizerFactory"/>

<charFilter class="solr.HTMLStripCharFilterFactory"/><!-- 清除HTML样式 -->

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"

ignoreCase="true" expand="true"/>

<filter class="solr.LowerCaseFilterFactory"/>

</analyzer>

</fieldType>

五.配置MLT文档相识度搜索

1.添加配置

<!-- Solr More like this 文件相似度搜索用到此配置 -->

<requestHandler name="/mlt" class="solr.MoreLikeThisHandler">

<lst name="defaults">

<!-- wt即writer type,即返回的数据的MIME类型,如json,xml等等 -->

<str name="wt">json</str>

<str name="fl">

ZSYBS,ZSYWT,ZSYDA,ZSBS,XH,ZSDZT,CZRBS,ZZBM,DQBM,FJFZBS,

SCJBS,ZSYWB,YXQ,YDHS,GDMB,ZSLX,CZSJ,CJSJ</str><!-- 需要返回的字段 -->

<str name="mlt.qf"> <!-- 设置 mlt.fl中的各个字段的权重 -->

ZSYWT^2.0 ZSYWB^1.0

</str>

<str name="mlt.fl">ZSYWT,ZSYWB</str><!-- 指定用于判断是否相似的字段 -->

<str name="mlt.match.include">true</str>

<!-- 指定最小的分词频率,小于此频率的分词将不会被计算在内 -->

<str name="mlt.mintf">1</str>

<!-- 指定最小的文档频率,分词所在文档的个数小于此值的话将会被忽略 -->

<str name="mlt.mindf">1</str>

<!-- 指定分词的最小长度,小于此长度的单词将被忽略。 -->

<str name="mlt.minwl">2</str>

<!-- 默认值5. 设置返回的相似的文档数 -->

<int name="mlt.count">10</int>

<str name="df">ZSYBS</str>

<str name="q.op">AND</str>

</lst>

</requestHandler>

2.测试结果

六.配置SolrJ高亮展示

1. 高亮的默认配置

<!-- Highlighting defaults -->

<str name="hl">on</str>

<str name="hl.fl">content features title name</str>

<str name="hl.preserveMulti">true</str>

<str name="hl.encoder">html</str>

<str name="hl.simple.pre"><b></str>

<str name="hl.simple.post"></b></str>

<str name="f.title.hl.fragsize">0</str>

<str name="f.title.hl.alternateField">title</str>

<str name="f.name.hl.fragsize">0</str>

<str name="f.name.hl.alternateField">name</str>

<str name="f.content.hl.snippets">3</str>

<str name="f.content.hl.fragsize">200</str>

<str name="f.content.hl.alternateField">content</str>

<str name="f.content.hl.maxAlternateFieldLength">750</str>

2. 启用高亮

SolrQuery solrQuery = new SolrQuery();

solrQuery.setQuery("ZSYWT:交易电价"); //设置查询关键字

solrQuery.setHighlight(true); //开启高亮

solrQuery.addHighlightField("ZSYWT"); //高亮字段

solrQuery.addHighlightField("ZSYWB"); //高亮字段

solrQuery.setHighlightSimplePre("<font color='red'>"); //高亮单词的前缀

solrQuery.setHighlightSimplePost("</font>"); //高亮单词的后缀

solrQuery.setParam("hl.fl", "ZSYWT");

七.配置搜索关键词自动补全(汉字,拼音)

  1. 添加配置

<searchComponent name="suggest" class="solr.SuggestComponent">

<lst name="suggester">

<str name="name">mySuggester</str>

<str name="lookupImpl">FuzzyLookupFactory</str>

<str name="dictionaryImpl">DocumentDictionaryFactory</str>

<str name="field">ZSYWT_PINYIN</str><!--匹配字段,可以使用copyField实现多列-->

<!--权重,用于排序-->

<!--<str name="weightField">ZSYWB</str>-->

<str name="suggestAnalyzerFieldType">text_cn</str>

</lst>

</searchComponent>

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">

<lst name="defaults">

<str name="suggest">true</str>

<str name="suggest.build">true</str>

<str name="suggest.dictionary">mySuggester</str><!--与上面保持一致-->

<str name="suggest.count">10</str>

</lst>

<arr name="components">

<str>suggest</str>

</arr>

</requestHandler>

2.设置搜索字段

<!-- 设置自动补全 -->

<field name="ZSYWT_PINYIN" type="text_cn" indexed="true"

stored="true" multiValued="true"/>

<copyField source="PINYIN" dest="ZSYWT_PINYIN"/>

<copyField source="ZSYWT" dest="ZSYWT_PINYIN"/>

3.测试结果

八.搜索关键词自动纠错

代码实现:

public Collection<List<String>> getAutomaticErrorCorrection(String content)

throws SolrServerException, IOException {

HttpSolrServer server = new HttpSolrServer(url);

SolrQuery params = new SolrQuery();

params.set("qt", "/suggest");

//全部转换为拼音

StringBuilder sb = new StringBuilder();

char[] array = content.toCharArray();

for(int j=0;j<array.length;j++){

if(isChineseByBlockStyle(array[j])){

List<Pinyin> pinyinMidList = HanLP.convertToPinyinList(""+array[j]);

for (Pinyin pinyin : pinyinMidList)

{

sb.append(pinyin.getPinyinWithoutTone());

}

}else{

sb.append(array[j]);

}

}

params.setQuery(sb.toString());

QueryResponse response = null;

response = server.query(params);

SuggesterResponse suggest = response.getSuggesterResponse();

Collection<List<String>> collection = suggest.getSuggestedTerms().values();

server.close();

return collection;

}

Solr5.5高级应用(基于tomcat9)的更多相关文章

  1. ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

    在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...

  2. ASP.NET Identity 身份验证和基于角色的授权

    ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...

  3. Azure 标准与高级托管磁盘存储的相互转换

    托管磁盘提供两种存储选项:高级(基于 SSD)和标准(基于 HDD). 它允许基于性能需求在这两个选项之间轻松切换,并保障最短停机时间. 非托管磁盘不具备此功能. 但可以轻松转换为托管磁盘,以便在这两 ...

  4. Apache Spark 2.2中基于成本的优化器(CBO)(转载)

    Apache Spark 2.2最近引入了高级的基于成本的优化器框架用于收集并均衡不同的列数据的统计工作 (例如., 基(cardinality).唯一值的数量.空值.最大最小值.平均/最大长度,等等 ...

  5. ip route rule 路由策略 高级路由 捆绑 网桥

    http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...

  6. OpenGL的学习资源

    OpenGL是3D图形接口工业标准,使用上非常简单,所有API不过上百个函数,但理解OpenGL就没那么简单,本文总结OpenGL的学习资源,包括官方资料.网上教程.示例程序等. Wikipedia: ...

  7. Python学习手册(1入门知识-数据类型)

    UNIX env查找技巧 在一些UNIX系统上,可以用这样一种方法避免硬编码Python解释器的路径,在文件的特定的第一行注释中写上这样一句话. #! usr/bin/env/ python...sc ...

  8. Android开发工具之Dash

    作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...

  9. Dash

    作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...

随机推荐

  1. 在Mac下连接阿里云服务器

    1.登录 ssh root@IP地址 eg:00.00.00.00 2.新建用户 useradd -d /home/用户名 -m 根目录名 (这条命令,就是创建一个新用户,并给该用户在home目录下创 ...

  2. MYSQL事务隔离级别详解附加实验

    参考: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html http://xm-king.iteye.com/blog/77072 ...

  3. Java 容器源码分析之 TreeMap

    TreeMap 是一种基于红黑树实现的 Key-Value 结构.在使用集合视图在 HashMap 中迭代时,是不能保证迭代顺序的: LinkedHashMap 使用了双向链表,保证按照插入顺序或者访 ...

  4. Spring Boot (二)集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  5. MySQL高可用之组复制技术(2):配置单主模型的组复制

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  6. Qt5 在添加 Q_OBJECT 后发现编译出错的原因

    在 Qt 编写过程中,如多线程使用信号槽时,需要添加 Q_OBJECT,但是在添加之后发现编译老会出错.如下: class ThreadSxxx : public QThread { Q_OBJECT ...

  7. 关于VUE首屏加载过长的优化,VUE项目开发优化

    1. 按需引入UI组件 当下市面上流行的UI组件基本都支持按需加载,本文以Element UI为例: (1)     新建一个elementUI.js文件 (2)     访问地址找到按需引入方式的说 ...

  8. element框架中表格的筛选功能使用说明(转载)

    一.element框架中表格的筛选功能使用说明 转载:https://blog.csdn.net/liangxhblog/article/details/80513030 在element ui 框架 ...

  9. [PHP]算法-最长公共子串的PHP实现

    最长公共子串问题: 给定两个字符串,求出它们之间最长的相同子字符串的长度. 暴力解法思路: 1.以两个字符串的每个字符为开头,往后比较,这样就会需要两层循环 2.两层循环内部的比较方式,也是一层循环, ...

  10. Java基础IO流(三)字符流

    字符流: 文本和文本文件: java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)文件是byte byte byte....的数据序列,而文本文件是文本(char)序列 ...