`
yangjayup
  • 浏览: 253603 次
  • 性别: 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>

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ikanalyzer-solr8.4.0_solr8_solr_ikanalyzer_中文分词_

    3. **配置Schema.xml**:在 Solr 的 schema.xml 文件中,我们需要定义字段类型(FieldType)并指定使用 ikanalyzer。例如,可以创建一个名为 `text_ik` 的字段类型,并设置其`analyzer_class`属性为 `org.apache....

    ik-analyzer-solr7.zip

    配置文件(如`schema.xml`或`solrconfig.xml`)需要更新以指示Solr使用IKAnalyzer进行分词。JAR库文件(如`ik-analyzer.jar`)则需要添加到Solr的类路径中,以便在运行时能够加载和使用分词器。字典文件通常包含预定...

    IKAnalyzer-5.0.jar及solr-analyzer-extra-5.3.jar

    在实际应用中,用户可能需要配置Solr的schema.xml文件,指定使用IKAnalyzer作为默认的字段分析器,同时根据需求选择合适的分词策略。同时,通过solr-analyzer-extra-5.3.jar,用户还可以集成更多的文本处理功能,如...

    solr配置ikanalyzer分词文件以使用说明

    ikanalyzer的配置主要涉及两个步骤:添加分词器jar包和配置schema.xml。 a. **添加jar包**:将ikanalyzer的jar文件(如`ikanalyzer-2012_u6.jar`)放入Solr的`server/solr-webapp/webapp/WEB-INF/lib`目录下。这样...

    solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0

    2. **配置Solr schema.xml**:在Solr的schema.xml文件中,定义字段类型(fieldType),并指定使用Ik Analyzer。例如: ```xml &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; ...

    solr4.X所用IKAnalyzer中文分词器jar包

    3. **配置Solr**:在`solrconfig.xml`中配置分词器,指定使用IKAnalyzer,并在`schema.xml`中定义字段类型,指定该字段使用IKAnalyzer进行分词。 4. **重启Solr**:完成上述配置后,重启Solr服务器,使新的分词器...

    solr6.x的IKAnalyzer配置智能分词

    - **修改schema.xml**:在Solr的`conf`目录下,找到`schema.xml`文件,这是定义字段类型和字段的配置文件。我们需要在其中添加IKAnalyzer作为某个字段的分析器,例如: ```xml &lt;fieldType name="text_ik" class=...

    solr+IK Analyzer

    2. **配置分析器**:在Solr的schema.xml文件中,配置默认的分析器为IKAnalyzer,指定词典路径。 3. **重启Solr**:完成配置后,重启Solr服务使改动生效。 4. **测试验证**:创建或更新索引,然后通过Solr的Admin UI...

    solr5.5.x的中文分词IKAnalyzer

    在实际应用中,配置IKAnalyzer与Solr集成时,你需要在Solr的schema.xml或managed-schema文件中定义字段类型,并指定使用IKAnalyzer。例如: ```xml &lt;fieldType name="text_ik" class="solr.TextField" ...

    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/...

    支持solr 5.3.0的IKAnalyzer中文分词器

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

    solr 5.0.0 + tomcat7 安装 + IKAnalyzer中文分词

    - 配置Solr的schema.xml,添加IKAnalyzer作为默认的分析器,如: ``` &lt;fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100"&gt; &lt;analyzer type="index"&gt; &lt;tokenizer class="org.apache...

    ikanalyzer-solr5

    2. 配置 Solr 的 schema.xml 文件,指定使用 ikanalyzer 作为字段的分析器。例如,可以在 `&lt;fieldType&gt;` 标签中添加以下内容: ``` &lt;fieldType name="text_ikanalyzer" class="solr.TextField" ...

    solr-7.7.2+ik-analyzer-solr7x.zip

    安装和配置过程通常包括解压压缩包、配置Solr的schema.xml文件以包含Ik Analyzer、启动Solr服务,并将Ik Analyzer相关的jar文件添加到Solr的类路径中。 总之,"solr-7.7.2+ik-analyzer-solr7x.zip"提供了Solr 7.7.2...

    solr6.0以上版本可以配置的IKAnalyzer分词器

    3. **配置schema.xml**:打开Solr的`conf/schema.xml`文件,我们需要为需要分词的字段定义一个`&lt;fieldType&gt;`,并指定使用IKAnalyzer。例如: ```xml &lt;fieldType name="text_ik" class="solr.TextField" ...

    solr 中文分词其IKAnalyzer 支持solr版本5.X-7.X

    2. **配置schema.xml**:在Solr的配置文件`schema.xml`中,定义字段类型(fieldType)并指定使用IKAnalyzer。例如: ```xml &lt;fieldType name="text_ik" class="solr.TextField"&gt; &lt;analyzer type="index"&gt; ...

    solr4的IK中文分词器IKAnalyzer2012FF_u1.jar和相关xml文件

    在Cloudera平台下安装Solr分词器的教程可能是指导用户如何在基于Hadoop的Cloudera环境中部署和配置Solr,包括如何将IK Analyzer集成到Solr的schema.xml文件中,以及如何启动和测试分词器。这通常涉及到添加库依赖、...

    ikanalyzer分词器

    在Solr的配置文件schema.xml中,我们需要定义一个字段类型(fieldType),并指定ikanalyzer作为其分析器。 ```xml &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; &lt;analyzer type...

    分词器 ikanalyzer-solr6.5

    ikanalyzer-solr6.5 是一个专门为Solr 6.5版本设计的中文分词器,它基于ikanalyzer,并且进行了优化以更好地适应Solr的索引和搜索需求。ikanalyzer是一个开源的、基于Java实现的中文分词库,主要用于解决中文文本...

Global site tag (gtag.js) - Google Analytics