`
flysnowxf
  • 浏览: 573558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

solr查询不使用query analyzer中文分词的问题解决

阅读更多
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 吃饭)
分享到:
评论

相关推荐

    支持solr 5.3.0的IKAnalyzer中文分词器

    IKAnalyzer中文分词器本身已经不支持最新的solr 5,集成到solr中分词会报错,这里将解决了solr 5支持问题的最新IK包共享出来,希望能帮到各位! 附上IK在schema.xml中的配置: &lt;fieldType name="text_ik" class="...

    solr5.x(含5.4)可用的ikanalyzer中文分词

    solr5.x(含5.4)可用的ikanalyzer中文分词 &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;analyzer type="index"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" /&gt; ...

    solr6对应的IKAnalyzer分词器

    solr6对应的IKAnalyzer分词器jar包,使用方法: 1. 添加分词器的jar文件:在文件夹`contrib`下新建一个文件夹`rd-lib`,并将`IKAnalyzer2012_u6.jar`拷贝进来,这个文件夹用来存放第三方jar文件,后面做数据导入时候...

    IKAnalyzer分词器 下载IKAnalyzer2012FF_u1.jar

    IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...

    ik-analyzer-solr7.zip

    1.ik中文分词器适配最新版本solr7和solr8,下载后解压,将target下的ik-analyzer-7.7.1.jar包放入Solr服务的`Jetty`或`Tomcat`的`webapp/WEB-INF/lib/`目录下。 2.将`resources`目录下的5个配置文件放入solr服务的`...

    IKAnalyzer-solr4.x-update.zip

    通过继承Analyzer编写自定义类UseSmartIKAnalyzer和NotUseSmartIKAnalyzer,实现智能分词和最细粒度分词,支持solr4.7通过配置schema.xml实现不同的分词效果 &lt;fieldType name="text_ik" class="solr.TextField"&gt; ...

    IKAnalyzer5.2.1增加连续数字、字母、英语智能分词支持solr5.x以上、lucence5.x以上版本

    &lt;analyzer type="query"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" isIndistinct="false"/&gt; &lt;filter class="solr.LowerCaseFilterFactory"/&gt; &lt;filter class="...

    IKAnalyzer5.2.1src增加连续数字、字母、英语智能分词支持solr5.x以上、lucence5.x以上版本

    &lt;analyzer type="query"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" isIndistinct="false"/&gt; &lt;filter class="solr.LowerCaseFilterFactory"/&gt; &lt;filter class="...

    ik-analyzer-8.3.1分词插件.rar

    &lt;analyzer type="query"&gt; &lt;tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/&gt; &lt;filter class="solr.LowerCaseFilterFactory"/&gt; &lt;/analyzer&gt; 3、重启solr ....

    ik-analyzer-solr5 jar包

    对于solr5.x系列中文分词器在solr中配置如下 &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/&gt; &lt;analyzer type=...

    中文分词器IK Analyzer 2012FF_hf1

    亲测可用的中文分词器,也可以到IK Analyzer官网下载,网址如下: https://code.google.com/archive/p/ik-analyzer/downloads 在solrcode的schema.xml文件中的配置如下: 配置中文分词器的fieldType: ...

    IKAnalyzer2012FF_u1.jar

    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分词器,同义词

    支持Spring-data-solr1.5的ik分词器,并且修改了代码,添加一个新的类,用于支持同义词,目前可以同时支持分词和同义词的功能。 修改 managed-schema,添加 &lt;fieldType name="text_lk" class="solr.TextField"&gt; ...

    ik对应的7.x分词器

    二、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-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    中文拼音分词器

    针对中文进行修改的拼音分词器,很强大,支持首字母搜索、全拼搜索,首字母+全拼搜索!配置如下:&lt;fieldtype name="text_pinyin" class="solr.TextField"&gt; &lt;analyzer type="index"&gt; &lt;tokenizer class="org.wltea....

    IKAnalyzer2012FF_u1

    2、将IKAnalyzer.cfg.xml、stopword.dic拷贝到需要使用分词器的core的conf(盘符:\solr\server\solr\WEB-INF\classes)下面(注意:如果没有classe文件夹自己创建一个classes文件夹,方便配置自己的定义的词库) ...

    ansj分词jar包

    solr配置ansj,managed-schema.xml中配置 &lt;fieldType name="text_ansj" class="solr.TextField" positionIncrementGap="100"&gt; &lt;analyzer type="index"&gt; ...

Global site tag (gtag.js) - Google Analytics