solr配置庖丁分词器IK分词器之后出现以下问题,怎么解决?

勿忘初心 始终如一
solr学习之路 部署到tomcat并且配置中文分词器IKanalyzer &一&
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
废话不多说,直接开始安装solr
中文分词器版本 ikanalyzer2012
solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上
关于solrhome的概念
SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore,一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
所以首先创建solrhome目录最好不要在tomcat中创建此目录
我这里创建在F:\solrhome
创建好后开始整合tomcat与solr
1.首先将solr解压 solr\example\webapps 目录下找到solr.war 放到tomcat的webapps下
启动tomcat将war包解压
关闭tomcat 将war包删除 进入solr文件夹进入 solr\WEB-INF 目录
找到配置文件文件 并修改
按照箭头修改配置文件记得将你的solrHOME的路径写上去
配置完成后 将你solr目录下(不是tomcat下的solr目录是你解压的solr目录)的将所有包放到apache-tomcat-8.0.37\webapps\solr\WEB-INF\lib目录下
将solr文件夹复制到你的solrhome目录下
启动tomcat
至此solr整合tomcat完成
但是solr自带的分词器对中文不友好这里我们配置ikanalyzer分词器
将ikanalyzer2012解压
找到ikanalyzer的jar包放入apache-tomcat-8.0.37\webapps\solr\WEB-INF\lib目录下
在apache-tomcat-8.0.37\webapps\solr\WEB-INF目录下创建classes文件夹
将ikanalyzer的配置文件放入classes文件夹
找到solrhome\solr\collection1\conf目录中的schema.xml
&fieldType name="text_ik" class="solr.TextField"&
&analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/&
&/fieldType&
&field name="title_ik" type="text_ik" indexed="true" stored="true" /&
&field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/&
重启tomcat进入solr
配置成功界面
solr的页面客户端如何使用? 配置文件中的各种配置的含义是什么?
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&|&&|&&|&&|&&
当前位置: >
关于solr配置IK中文分词后报500错
作者:x & 来源:转载 &
摘要: HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure: [schema.xml] Duplicate field definition for 'name' [[[name{type=text_ik,properties=indexed,tokenized,stored}]]] and
HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure: [schema.xml] Duplicate field definition for 'name' [[[name{type=text_ik,properties=indexed,tokenized,stored}]]] and [[[name{type=text_general,properties=indexed,tokenized,stored}]]]. Schema file is F:\360Downloads\apache-tomcat-7.0.47\solr\home\collection1\schema.xml,trace=org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: [schema.xml] Duplicate field definition for 'name' [[[name{type=text_ik,properties=indexed,tokenized,stored}]]] and [[[name{type=text_general,properties=indexed,tokenized,stored}]]]. Schema file is F:\360Downloads\apache-tomcat-7.0.47\solr\home\collection1\schema.xml at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:783) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:295) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) Caused by: org.apache.solr.common.SolrException: [schema.xml] Duplicate field definition for 'name' [[[name{type=text_ik,properties=indexed,tokenized,stored}]]] and [[[name{type=text_general,properties=indexed,tokenized,stored}]]]. Schema file is F:\360Downloads\apache-tomcat-7.0.47\solr\home\collection1\schema.xml at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:608) at org.apache.solr.schema.IndexSchema.&init&(IndexSchema.java:166) at org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55) at org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69) at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:519) at org.apache.solr.core.CoreContainer.create(CoreContainer.java:557) at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:247) at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:239) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) ... 3 more Caused by: org.apache.solr.common.SolrException: [schema.xml] Duplicate field definition for 'name' [[[name{type=text_ik,properties=indexed,tokenized,stored}]]] and [[[name{type=text_general,properties=indexed,tokenized,stored}]]] at org.apache.solr.schema.IndexSchema.loadFields(IndexSchema.java:664) at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:471) ... 15 more ,code=500}
解决思路:
1.将报错信息google可能找的到解决此方案的文章。找到不到执行
2.将报错信息拿到goolgle翻译。翻译后不难。发现F:\360Downloads\apache-tomcat-7.0.47\solr\home\collection1\schema.xml中field结点的name属性重名。
3.将schema.xml里的&field name=&name& type=&text_ik& indexed=&true& stored=&true&/&
改成&field name=&xiao& type=&text_ik& indexed=&true& stored=&true&/&
4.重起tomcat问题解决
版权所有 IT知识库 CopyRight (C)
IT知识库 IT610.com , All Rights Reserved.Solr配置中文分词器IKAnalyzer及增删改查调用
Solr配置中文分词器IKAnalyzer及增删改查调用
一、配置IKAnalyzer中文分词器
Solr 版本5.2.1
IKAnalyzer2012_u6.jar报错 ,用IKAnalyzer2012_FF_hf1.jar 替换可解决
解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread &main& java.lang.VerifyError: class org.wltea.analyzer.lu
一、配置IKAnalyzer中文分词器
Solr 版本5.2.1
IKAnalyzer2012_u6.jar报错 ,用IKAnalyzer2012_FF_hf1.jar 替换可解决
解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/SLjava/io/R)Lorg/apache/lucene/analysis/TokenS原因IKAnalyzer中参考手册中的例子是使用的lucene3.4,与4.0已经是不兼容了。使用IKAnalyzer2012_FF_hf1.jar可以解决问题
java.lang.AbstractMethodError
Caused by: java.lang.AbstractMethodError
at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
lucene版本跟IK分词版本不一致导致,这块版本一定要对应上
由于solr版本较高暂时无法解决
&field name="messageId" type="string" indexed="true" stored="true" required="true" multiValued="false"/&
&field name="msg_title" type="text_ik" stored="true" indexed="true"/&
&field name="msg_content" type="text_ik" stored="true" indexed="true" multiValued="true"/&
&uniqueKey&messageId&/uniqueKey&
&!-- IKAnalyzer 中文分词--&
&fieldType name="text_ik" class="solr.TextField"&
&analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" /&
&analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" /&
&/fieldType&
二、添加、删除、查询索引
需要除了solr相关包还需要下面的jar包
Message.java
package org.itat.lucene.solr.
import org.apache.solr.client.solrj.beans.F
public class Message {
private String messageId;
private String[]
public Message() {
public Message(String messageId, String title, String[] content) {
this.messageId = messageId;
this.title =
this.content =
public String getMessageId() {
return messageId;
public void setMessageId(String messageId) {
this.messageId = messageId;
public String getTitle() {
@Field("msg_title")
public void setTitle(String title) {
this.title =
public String[] getContent() {
@Field("msg_content")
public void setContent(String[] content) {
this.content =
增删改查demo
package org.itat.lucene.solr.
import java.io.IOE
import java.net.MalformedURLE
import java.util.ArrayL
import java.util.L
import org.apache.solr.client.solrj.SolrQ
import org.apache.solr.client.solrj.SolrServerE
import org.apache.solr.client.solrj.impl.CloudSolrS
import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrS
import org.apache.solr.client.solrj.impl.HttpSolrC
import org.apache.solr.client.solrj.impl.HttpSolrS
import org.apache.solr.client.solrj.response.QueryR
import org.apache.solr.client.solrj.response.UpdateR
import org.apache.solr.common.SolrD
import org.apache.solr.common.SolrDocumentL
import org.apache.solr.common.SolrInputD
import org.junit.B
import org.junit.T
public class SolrTest {
private final static String URL = "http://localhost:8080/solr/mail";
private HttpSolrServer server =
public void init() {
server = new HttpSolrServer(URL);
public void addOneOrDelete() {
/*HttpSolrServer server=new HttpSolrServer(URL);*/
/*ConcurrentUpdateSolrServer cs=new ConcurrentUpdateSolrServer(URL,1,1);
*新版已被ConcurrentUpdateSolrClient取代
/*CloudSolrServer css=new CloudSolrServer("192.168.0.1");//zookeeper地址
*已被CloudSolrClient
HttpSolrClient server= new HttpSolrClient(URL);//新版已经取代了HttpSolrServer
SolrInputDocument doc = new SolrInputDocument();
//id是唯一的主键,当多次添加的时候,最后添加的相同id的域会覆盖前面的域
doc.addField("messageId","3");
doc.addField("msg_title", "这是我的第一个solrj的程序");
doc.addField("msg_content","我的solrj的程序究竟能不能跑得起来呢?");
UpdateResponse ur=server.add(doc);
System.out.println(ur);
/*server.deleteByQuery("*:*");*/
server.commit(null,true,true,false);
server.close();
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//一下添加多个
public void addList() {
List&SolrInputDocument& docs = new ArrayList&SolrInputDocument&();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("messageId", "2");
doc.addField("msg_title", "很好!solr可以工作了");
doc.addField("msg_content","slor总算可以正式工作了");
docs.add(doc);
doc = new SolrInputDocument();
doc.addField("messageId", "3");
doc.addField("msg_title", "测试一下solr的添加");
doc.addField("msg_content","看看能不能添加一个列表信息");
docs.add(doc);
server.add(docs);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
//基于java bean的添加
public void addBean() {
List&Message& msgs = new ArrayList&Message&();
msgs.add(new Message("4","基于java bean的添加",
new String[]{"通过java bean完成添加","java bean的添加附件"}));
msgs.add(new Message("5","基于java bean的列表数据的添加",
new String[]{"测试如何通过一个对象完成添加","通过对象完成添加的附件"}));
server.addBeans(msgs);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
public void test04() {
//定义查询字符串
SolrQuery query = new SolrQuery("*");
query.setStart(0);
query.setRows(5);
QueryResponse resp=
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//查询出来的结果都保存在SolrDocumentList中
SolrDocumentList sdl = resp.getResults();
System.out.println(sdl.getNumFound());
for(SolrDocument sd:sdl) {
System.out.println(sd);
System.out.println(sd.getFieldValue("msg_title")+","+sd.getFieldValue("msg_content"));
} catch (SolrServerException e) {
e.printStackTrace();
//基于javabean查询
public void test05() {
SolrQuery query = new SolrQuery("*");
query.setStart(0);
query.setRows(5);
QueryResponse resp=
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//可以直接查询相应的bean对象,但是不是很常用,无法得到查询总条数
List&Message& list = resp.getBeans(Message.class);
System.out.println(list.size());
for(Message msg:list) {
System.out.println(msg.getTitle());
} catch (SolrServerException e) {
e.printStackTrace();
public void test06() {
SolrQuery query = new SolrQuery("msg_content:测试 OR msg_title:测试");
query.setHighlight(true).setHighlightSimplePre("&span class='highligter'&")
.setHighlightSimplePost("&/span&")
.setStart(0).setRows(5);
query.setParam("hl.fl", "msg_title,msg_content");
QueryResponse resp=
resp = server.query(query);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//查询出来的结果都保存在SolrDocumentList中
SolrDocumentList sdl = resp.getResults();
System.out.println(sdl.getNumFound());
for(SolrDocument sd:sdl) {
String id = (String)sd.getFieldValue("messageId");
System.out.println(resp.getHighlighting().get(id).get("msg_content"));
//高亮结果以唯一索引为key
} catch (SolrServerException e) {
e.printStackTrace();
本文出自 “” 博客,请务必保留此出处
用云栖社区APP,舒服~
【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下?&&
用配置管理(Application Configuration Management,简称 ...
是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配...
兼容Jenkins标准,可提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...
阿里中间件云大使温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
下载地址:,可以选择一个mirror站点下载2.解压下载后的solr压缩包3.运行start.jar,该jar包在solr目录的example文件夹中,命令如下: java -jar start.jar4.启动后出现如下图信息,说明启动成功,即可访问&来访问solr。至此完成solr自带例子的访问。官方参考文档:二、在tomcat下配置与使用solr的方法1、配置好tomcat的运行环境。2、建立solr的运行目录(也可以直接放在tomcat的webapps目录下),如:G:\solr\,随后的solr应用就放在这个目录中。3、拷贝下载解压solr后的目录dist下的solr-4.2.1.war文件到G:\solr\&目录下,可以解压到solr目录,形成G:\solr\solr的目录形式(也可以不解压)。4、拷贝解压后的solr的example目录下的solr文件夹到G:\solr\目录,把原来的solr-4.2.1.war解压后的solr目录合并。 即最终结果是:G:\solr\solr目录下有solr-4.2.1.war里面的WEB-INF等目录和文件信息,还包括example/solr目录下面的bin、collection1等文件和文件夹,如下图:5、更改G:\solr\solr\collection1\conf\solrconfig.xml文件的内容,将“&dataDir&${solr.data.dir:}&/dataDir&”更改为:&dataDir&${solr.data.dir:G:\solr\solr\data}&/dataDir&&6、创建tomcat的Context文件用来部署solr。 创建$CATALINA_HOME/conf/Catalina/localhost/solr.xml文件,文件内容为:&?xml version="1.0" encoding="utf-8"?&&Context docBase="G:\solr\solr" debug="0" crossContext="true"&
&Environment name="solr/home" type="java.lang.String" value="G:\solr\solr" override="true"/&&/Context&7、启动tomcat访问即可看到solr的管理界面。至此,tomcat中配置solr成功。官方参考文档:三、配置中文分词参考网址:1、下载IK中文分词下载地址:2、解压下载后的中文分词,并将IKAnalyzer.cfg.xml、IKAnalyzer2012FF_u1.jar、stopword.dic三个文件拷贝到solr项目的WEB-INF/lib目录下。3、配置IK分词首先编辑solr的web工程下面的\collection1\conf文件夹中的schema.xml文件,在&types&&/types&标签项中中增加如下内容:&!-- 我添加的IK分词 --& &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&既可以使用ik分词器进行中文的分词。具体可以参考上面的网址。四、索引数据库
阅读(4087)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'solr+tomcat配置+中文分词IK配置',
blogAbstract:'一、运行solr自带例子的方法1.下载solr最新版本,这里是solr-4.2.1.zip下载地址:
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}& & & 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词。其中包含一个词典。 那么既然用到了这种国际化的框架,那么就避免不了中文分词。尤其是国内特殊行业比较多。比如油田系统从勘探、打井、投产等若干环节都涉及一些专业词汇。 再像电商,手机、手机配件、笔记本、笔记本配件之类。汽车,品牌、车系、车型等等,这一系列数据背后都涉及各自领域的专业名次,所以中文分词就最终的目的还是为了解决搜索结果的精确度和匹配度的问题。
IK搜索预览
& & &我的univeral Core里包含两条数据,第二条数据的title和author都是中文的。 然后我用关键字q=title:平凡来搜索,搜索出来第二条数据。 如果你在你的索引库里没搜索出来也不要奇怪,配置下IK中文分词就可以了。
中文语义分析
& & 在索引库Core左侧菜单Analysis中,你可以输入复杂的查询【关键字】,选择对应字段,点击【Analysis Values】会帮你分析出当前这个复杂的词组都会分解出那几个搜索关键字或关键词来。如果这里满足不了你的专业词汇,那就该从词典下手了。我这里输入了:平凡的世界。分析后得出两个词:平凡、世界。 也就是我在上一张图中用平凡搜索的结果。
中文分词的配置和使用
& & &1、下载对应IK版本。我本地部署的Solr5.5.1。 所以就下载最新版本。
& & &2、把ik目录下的文件复制到tomcat/webapps/solr/WEB-INF/lib目录下。 ik目录里有一个ext.dic、stopword.dic。 可以打开看一看里面内容。
& & &3、修改schema.xml。我本地是univeral/conf/managed-schema。 增加中文分词配置节点,内容如下
&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、修改对应field的类型。我修改了两个字段
&field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /&
&field name="author" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /&
& & &参考教程:
& & 如果之前你已经创建了索引,那么配置IK中文分词后先修改schema.xml中的field对应类型。 清空索引后重新创建索引。 OK。大功搞成。
阅读(...) 评论()

我要回帖

更多关于 solr7 配置中文分词器 的文章

 

随机推荐