`
yangjayup
  • 浏览: 246483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SOLR企业搜索平台 三 (schema.xml配置+IK Analyzer分词)

阅读更多

文章转自:http://3961409.blog.51cto.com/3951409/836027

 

我们首先来说说这个schema.xml。 
schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型。主要包括types、fields和其他的一些缺省设置。 

1)首先需要在types结点内定义一个FieldType子结点,包括name,class,positionIncrementGap等等一些参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。在第二篇文章中详细讲了怎样添加中文分词器,详情请参见http://3961409.blog.51cto.com/3951409/833417

2)接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。 
例: 

  1. <field name="id" type="string" indexed="true" stored="true" required="true" />  
  2. <field name="ant_title" type="textComplex" indexed="true" stored="true" />  
  3. <field name="ant_content" type="textComplex" indexed="true" stored="true" /> 
  4. <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/> 

field的定义相当重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置multiValued属性为true,避免建索引抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。

3)建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索: (此时进行查询使用all:jason就相当于使用ant_title:jason or ant_content:jason)

  1. <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/>  

并在拷贝字段结点处完成拷贝设置: 

  1. <copyField source="ant_title" dest="all"/> 
  2. <copyField source="ant_content" dest="all"/> 

4)除此之外,还可以定义动态字段,所谓动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。

schema.xml配置文件大体上就是这样,更多细节请参见solr wiki http://wiki.apache.org/solr/SchemaXml

 

 

转自:http://www.cnblogs.com/wrt2010/archive/2012/11/14/2769521.html

 

附:ik-analyzer google code 地址:https://code.google.com/p/ik-analyzer/downloads/list

 

下面就来看一下中文分词吧,这里用的分词是IK Analyzer 2012。

中文分词

复制代码
 1 <!-- IKAnalyzer2012 -->
 2 <fieldType name="text_ika" class="solr.TextField">
 3     <analyzer type="index" positionIncrementGap="100" autoGeneratePhraseQueries="true">
 4         <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
 5         <!-- <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> -->
 6         <!-- <filter class="solr.LowerCaseFilterFactory"/> -->
 7     </analyzer>
 8     <analyzer type="query">
 9         <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" />
10         <!-- <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> -->
11         <!-- <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> -->
12         <!-- <filter class="solr.LowerCaseFilterFactory"/> -->
13     </analyzer>
14 </fieldType>
复制代码

分词用的依旧是fieldType,为的是在下面的field中能够用到。

有两个analyzer,一个是index,一个是query,index是针对于所有,query是针对于搜索。

可以看到我注掉了两个filter,为什么呢。

先说简单的吧,一个是query中的同义词Filter,solr.SynonymFilterFactory,注掉他是因为当前没有一个庞大的词库能够支撑中文如此复杂的同义词量。

另外一个是忽略大小写的Filter,这个Filter可以根据自己的需要进行添加或删除,在我们的系统中,主要处理中文,这个用处也不大。

还有一个注掉的Filter是停词Filter,这个用处挺大的,为什么注掉呢?因为我感觉他在这里不太合适。

解释一下:停词组件在中文分词中很重要,IK也提供了相对应的配置方法,不仅仅可以处理停词,而且还可以自定义词库。所以,我建议将停词在IK中配置而不是在schema.xml中。

两种方法都说一下:

第一种:在schema.xml中配置,不要注释stopword组件,并将停词文件拷贝至solrHome/core/conf目录下(注意文件的编码方式,至少保证文本文件是UTF-8格式,更加严格的,保证文本文件是无BOM格式的UTF-8编码)。

第二种:在IK配置文件中配置,请下载一个IK分词组件,里面会有一个IKAnalyzer.cfg.xml的配置文件,拷贝到solr项目的源代码根目录下,并将stopword.dic也拷贝到根目录下,如下图所示:

记得要导入IK的Jar包,这样,在你的文件中就可以使用IK提供的中文分词了。

 给一个我用的stopword.dic,去下载

IK也可以自定义词库,这个可以看一下IK的文档,很简单,将你的自定义词库的文件拷贝至根目录,并在IK配置文件中配置即可。

 

(注意IK Solr4.0配置

这里特别的罗嗦几句,在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类。

4.1 solr4.0配置样例

 

使用IKAnalyzer的配置

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

     <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    支持solr 5.3.0的IKAnalyzer中文分词器

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

    IKAnalyzer分词器 下载IKAnalyzer2012FF_u1.jar

    使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar 具体操作如下: 引用 1.在/opt/cloudera/parcels/CDH/lib/...

    IKAnalyzer2012FF_u1.jar

    使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar solr-4.10.3下载地址:...

    solr6对应的IKAnalyzer分词器

    2. 引入分词器的jar文件:在`server/solr/RD-Product/conf/solrconfig.xml`中配置如下信息,将`rd-lib`这个文件夹下的所有jar包引入到服务中。 &lt;!-- 引入"contrib/rd-lib/"下所有jar文件 --&gt; ${solr.install.dir:../...

    IKAnalyzer-solr4.x-update.zip

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

    solr-IKAnalyzer5分词器需要的依赖.zip

    solr-ik中文分词器资源包,包括ext.dic,,IKAnalyzer.cfg.xml,,ik-analyzer-solr5-5.x.jar,,managed-schema,,solr-analyzer-ik-5.1.0.jar,,stopword.dic solr-ik分词 solr中文分词 ik分词资源

    ikanalyzer分词器

    ik-analyzer.jar的类库和schema.xml配置

    中文分词器IK Analyzer 2012FF_hf1

    在solrcode的schema.xml文件中的配置如下: 配置中文分词器的fieldType: &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene....

    IKAnalyzer2012FF_u1

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

    solr-ik分词器资源(包括schema)

    solr-ik中文分词器资源包,包括ext.dic,,IKAnalyzer.cfg.xml,,ik-analyzer-solr5-5.x.jar,,managed-schema,,solr-analyzer-ik-5.1.0.jar,,stopword.dic

    ik-analyzer-solr7.zip

    ① IKAnalyzer.cfg.xml ② ext.dic ③ stopword.dic ④ ik.conf ⑤ dynamicdic.txt 3. 配置Solr的`managed-schema`,添加`ik分词器`,示例如下; ```console &lt;!-- ik分词器 --&gt; ...

    ik-analyzer-8.3.1分词插件.rar

    另:为了方便自定义ik-analyzer的设置,可以把ik-analyzer-8.3.0.jar中的配置文件 也复制过来 cp -r ik-analyzer-8.3.1/* ../solr/WEB-INF/classes 2、修改/usr/local/solrhome/test_core目录中的managed-schema...

    solr所需资源下载(数据导入、分词器、数据库连接jar、配置文件、managed-schema)

    包括solr的所有资源文件文件...IKAnalyzer.cfg.xml ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar managed-schema mysql-connector-java-5.1.7-bin.jar solrconfig.xml data-config.xml ext.dic stopword.dic

    支持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以前的版本对于中文分词支持不好,通常会用IK分词器。对于solr7,可以直接使用提供的分词器。 二、solr7中文分词器使用步骤 1、复制lucene-analyzers-smartcn-7.2.0.jar(在contrib/analysis-extras/lucene-...

Global site tag (gtag.js) - Google Analytics