欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Solr配置中文分词器

请教solr中文分词的配置问题

赞成!0否决!

大家好,我已经配置好dp7.23+solr4.2.1版本的连接问题,

但是在中文分词的配置上遇到了麻烦。

我在schema.xml上写

<fieldType name="text_ik_test" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
?


这样是没有问题的吧~如下图,测试是通过的。

但是上面的配置,似乎没搞索引哎!

于是,我改成

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
      </analyzer>
   
   <analyzer type="query">
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        <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>

?

重启后,就报错了。

竟然说插件初始化错误,google了半天,不明所以。特来问问,请问有知道怎么解决的同学吗?麻烦帮我看下怎么解决,谢谢

drupal7solr

(0) 是的(0) 一点点(0) 没帮助

北极狐LV 7

  • 5 年前提出该问题

  • 71

3 个回答

赞成!0否决!

可以创建一个名为text的字段类型,如下:


<types
<fieldType name="text" class="solr.TextField" sortMissingLast="true" omitNorms="true"
  <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/> 
</fieldType
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
</types>
?




在fieldType里我们就可以加入要用到的中文分词器,SmartChineseAnalyzer是Lucene自带的一款基于统计规则来分词的中文分词器。
注意: 把apache-solr-4.0.0/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-4.0.0.jar 复制到solr下的lib目录里面

上面是定义了一个string的字段类型,这个类型的字段是不会用到中文分词器的。

然后定义三个字段id、title、text


<fields
  <field name="id" type="string" indexed="true" stored="true" required="true" />  
  <field name="title" type="text" indexed="true" stored="true"/> 
  <field name="text" type="text" indexed="true" stored="true" multiValued="true"/> 
</fields>
?


Id的字段类型为上面定义的string,其余两个字段为上面定义的text,也就是这两个字段将采用中文分词器进行分词。

下面再定义其它的一些内容:


<uniqueKey>id</uniqueKey
<defaultSearchField>text</defaultSearchField
<solrQueryParser defaultOperator="AND"/>


?


上面表示索引主键为id,默认的搜索字段为text,搜索为与搜索。

完整的schema.xml内容为:


<?xml version="1.0" encoding="UTF-8" ?> 
    
<schema name="example" version="1.5"
  <types
    <fieldType name="text" class="solr.TextField" sortMissingLast="true" omitNorms="true"
      <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/> 
    </fieldType
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
  </types
        
  <fields
    <field name="id" type="string" indexed="true" stored="true" required="true" />  
    <field name="title" type="text" indexed="true" stored="true" multiValued="true" omitNorms="true"/> 
    <field name="text" type="text" indexed="true" stored="true" multiValued="true"/> 
  </fields
    
  <uniqueKey>id</uniqueKey
  <defaultSearchField>text</defaultSearchField
  <solrQueryParser defaultOperator="AND"/> 
</schema>



?


注如果报错:Unknown FieldType: ‘string’ used in QueryElevationComponent,则是因为在配置中必须有一个字段的类型配置为string,如:

1
<field name="id" type="string" indexed="true" stored="true" required="true" />




?



(0) 是的(0) 一点点(1) 没帮助
孤魂的头像

孤魂LV 10

  • 5 年前回答该问题

  • 255

赞成!0否决!

http://outofmemory.cn/code-snippet/3659/Solr-configuration-zhongwen-fenc...

怎么和这个一模一样?谢谢你的好意了,不过你也太低估人家的搜索能力了吧。

我是搜索了很久,得不到要领,才上来问的。再一次谢谢!


(0) 是的(0) 一点点(0) 没帮助
北极狐的头像

北极狐LV 7

  • 5 年前回答该问题

  • 71

来自  http://www.drupalla.com/node/2843



Solr配置中文分词器

更多

在Solr中如果不配置中文分词器,则默认是不支持中文分词的。不过在Solr中配置中文分词器其实是很容易的,在你了解如何配置中文分词器前,你肯定已经知道如何搭建起一个Solr的开发环境了,假设你在本机创建了一个core,在其中的目录conf下,我们需要修改schema.xml文件,在这里我以最新版的apache-solr-4.0.0-BETA为例来说明。

我们可以创建一个名为text的字段类型,如下:

<types>
<fieldType name="text" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>
</fieldType>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
</types>

在fieldType里我们就可以加入要用到的中文分词器,SmartChineseAnalyzer是Lucene自带的一款基于统计规则来分词的中文分词器。

上面是定义了一个string的字段类型,这个类型的字段是不会用到中文分词器的。

然后定义三个字段id、title、text

<fields>
    <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="title" type="text" indexed="true" stored="true"/>
    <field name="text" type="text" indexed="true" stored="true" multiValued="true"/>
</fields>

Id的字段类型为上面定义的string,其余两个字段为上面定义的text,也就是这两个字段将采用中文分词器进行分词。

下面再定义其它的一些内容:

<uniqueKey>id</uniqueKey>
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>

上面表示索引主键为id,默认的搜索字段为text,搜索为与搜索。

完整的schema.xml内容为:

<?xml version="1.0" encoding="UTF-8" ?>

<schema name="example" version="1.5">
    <types>
        <fieldType name="text" class="solr.TextField" sortMissingLast="true" omitNorms="true">
            <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>
        </fieldType>
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    </types>

    <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true" /> 
        <field name="title" type="text" indexed="true" stored="true" multiValued="true" omitNorms="true"/>
        <field name="text" type="text" indexed="true" stored="true" multiValued="true"/>
    </fields>

    <uniqueKey>id</uniqueKey>
    <defaultSearchField>text</defaultSearchField>
    <solrQueryParser defaultOperator="AND"/>
</schema>

注如果报错:Unknown FieldType: ‘string’ used in QueryElevationComponent,则是因为在配置中必须有一个字段的类型配置为string,如:

<field name="id" type="string" indexed="true" stored="true" required="true" />


来自  http://outofmemory.cn/code-snippet/3659/Solr-configuration-zhongwen-fenci-qi


普通分类: