schema.xml已配置query的中文分词器,但搜索的结果不尽如意,solr并没有按照分词来进行搜索。比如搜索“我要吃饭了”,并没有把包含“吃饭”的文档给搜索出来。解决过程如下:
1.query analyzer使用IK,配置如下:<analyzer type ="query" >
<tokenizer class ="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" />
2.query analyzer效果如图:
我要吃饭了,可分词为“要吃”和“吃饭”。如果搜索“我要吃饭了”,solr应该把这两个词以OR的方式去搜索,结果却一厢情愿。
3.引用http://blog.chenlb.com/2010/08/get-solr-analysis-word.html
“这个问题的根本原因是 lucene / solr 使用的查询解析器生成的 Query 是短语查询。短语查询默认又是连续的词中没有其它字符。所以会找不到。
目前我知的方式大概有二种:
1、查询前分词一遍,把分出的词用空格分开,再去搜索(叫它为查询预处理)。查询前分词可以上面的接口。
2、扩展 solr query parser,返回 boolean query。”
4.使用方法1解决问题
即搜索前,先处理一下query analyzer的分词,然后再搜索。
solr分词的接口为:http://localhost:8080/solr/analysis/field?q=我要吃饭了
如果为多核配置,类似于http://localhost:8080/solr/核心名/analysis/field?q=我要吃饭了
结果返回:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="analysis">
<lst name="field_types" />
<lst name="field_names">
<lst name="text">
<lst name="query">
<arr name="org.wltea.analyzer.lucene.IKTokenizer">
<lst>
<str name="text">要吃</str>
<str name="type">word</str>
<int name="start">1</int>
<int name="end">3</int>
<int name="position">2</int>
</lst>
<lst>
<str name="text">吃饭</str>
<str name="type">word</str>
<int name="start">2</int>
<int name="end">4</int>
<int name="position">3</int>
</lst>
</arr>
</lst>
</lst>
</lst>
</lst>
</response>
注意<lst name="query">元素下可能有filter。我们只需要解析以上的xml,就可以获取到分词列表了。
最后,将分词列表组装成类似(要吃 OR 吃饭)的格式,就可以搜索到想要的结果。例如:
http://localhost:8080/solr/select/?q=(要吃 OR 吃饭)
分享到:
相关推荐
IKAnalyzer中文分词器本身已经不支持最新的solr 5,集成到solr中分词会报错,这里将解决了solr 5支持问题的最新IK包共享出来,希望能帮到各位! 附上IK在schema.xml中的配置: <fieldType name="text_ik" class="...
solr5.x(含5.4)可用的ikanalyzer中文分词 <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" /> ...
solr6对应的IKAnalyzer分词器jar包,使用方法: 1. 添加分词器的jar文件:在文件夹`contrib`下新建一个文件夹`rd-lib`,并将`IKAnalyzer2012_u6.jar`拷贝进来,这个文件夹用来存放第三方jar文件,后面做数据导入时候...
IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...
1.ik中文分词器适配最新版本solr7和solr8,下载后解压,将target下的ik-analyzer-7.7.1.jar包放入Solr服务的`Jetty`或`Tomcat`的`webapp/WEB-INF/lib/`目录下。 2.将`resources`目录下的5个配置文件放入solr服务的`...
通过继承Analyzer编写自定义类UseSmartIKAnalyzer和NotUseSmartIKAnalyzer,实现智能分词和最细粒度分词,支持solr4.7通过配置schema.xml实现不同的分词效果 <fieldType name="text_ik" class="solr.TextField"> ...
<analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" isIndistinct="false"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="...
<analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" isIndistinct="false"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="...
<analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> 3、重启solr ....
对于solr5.x系列中文分词器在solr中配置如下 <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type=...
亲测可用的中文分词器,也可以到IK Analyzer官网下载,网址如下: https://code.google.com/archive/p/ik-analyzer/downloads 在solrcode的schema.xml文件中的配置如下: 配置中文分词器的fieldType: ...
IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...
支持Spring-data-solr1.5的ik分词器,并且修改了代码,添加一个新的类,用于支持同义词,目前可以同时支持分词和同义词的功能。 修改 managed-schema,添加 <fieldType name="text_lk" class="solr.TextField"> ...
二、solr7中文分词器使用步骤 1、复制lucene-analyzers-smartcn-7.2.0.jar(在contrib/analysis-extras/lucene-libs目录下)到server/solr-webapp/webapp/WEB-INF/lib目录下 2、在managed-schema(在server/solr/...
word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
针对中文进行修改的拼音分词器,很强大,支持首字母搜索、全拼搜索,首字母+全拼搜索!配置如下:<fieldtype name="text_pinyin" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea....
2、将IKAnalyzer.cfg.xml、stopword.dic拷贝到需要使用分词器的core的conf(盘符:\solr\server\solr\WEB-INF\classes)下面(注意:如果没有classe文件夹自己创建一个classes文件夹,方便配置自己的定义的词库) ...
solr配置ansj,managed-schema.xml中配置 <fieldType name="text_ansj" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> ...