博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr分词
阅读量:5981 次
发布时间:2019-06-20

本文共 2616 字,大约阅读时间需要 8 分钟。

 

Solr版本:4.3.0。

 

分词器的配置在schema.xml文件,比如如下标签内容:

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

      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

也就是说,field类型如果指定为“text_general”,那么对该字段对应的值建索引和查询关键词分词时用的都是默认的分词器。默认分词器是按照空格分英文的,对中文会分成一个一个的字,这样的分词和查询体验都不好。

 

改变一:使用solr自带的中文分词器,Solr.SmartChineseSentenceTokenizerFactory

无论安装哪种分词器,大部分都有2个步骤。

1)拷贝jar包到solr的lib中,也就是webapps\solr\WEB-INF\lib目录下。

  smartcn的同步发行包是lucene-analyzers-smartcn-4.3.0.jar,在solr-4.3.0\contrib\analysis-extras\lucene-libs目录下

2)在schemal.xml文件中注册分词器,如下:

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

    <analyzer type="index">
        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
        <filter class="solr.SmartChineseWordTokenFilterFactory"/>
        <!--  
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
        -->
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
          -->
    </analyzer>
    <analyzer type="query">
          <!-- 此处配置同上 -->
        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
        <filter class="solr.SmartChineseWordTokenFilterFactory"/>
        <!--
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        -->
    </analyzer>
</fieldType>

内置的中文分词,问题是:分词不完全。比如“中华人民共和国”,分出来的结果是“中华人民”、“中华人民共和国”,用其他任何词都查不到。

 

改变二:使用外部分词器,如 org.wltea.analyzer.lucene.IKTokenizerFactory

ik,参见如下[2];

mmseg4j,参考如下[3];

paoding,参考如下[3]。

可以灵活配置停用词等。

 

参考:

[1].

[2].

[3].

[4].

[5].

 

posted on
2014-01-13 14:19 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/Phovan/p/3517376.html

你可能感兴趣的文章
Mybatis 3学习笔记(一)
查看>>
Guice系列之用户指南(十)
查看>>
树与森林的存储、遍历和树与森林的转换
查看>>
Android自定义属性
查看>>
Visual C#之核心语言
查看>>
代码重构(五):继承关系重构规则
查看>>
Windows App开发之集合控件与数据绑定
查看>>
中大型网站技术架构演变过程
查看>>
ARTS训练第三周
查看>>
vue中v-for循环如何将变量带入class的属性名中
查看>>
phpstorm xdebug remote配置
查看>>
引用与指针的区别
查看>>
pygtk笔记--2.1:布局容器,VBox、Hbox、Alignment
查看>>
dtree.js树的使用
查看>>
Springboot2.1.3 + redis 实现 cache序列化乱码问题
查看>>
线程什么时候需要同步,什么时候不需要同步?
查看>>
Struts2 自定义拦截器(方法拦截器)
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>