0

我在我的模式文件中添加了 LanguageAnalysis。添加后这个词干过滤器工厂已经开始工作,但这让我的一些词无法搜索。

我在 .

我的架构文件如下所示:

    <schema name="test" version="1.50">
 <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" />
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" omitNorms="true"/>
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="date" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back"/>     
      </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"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

 </types>
 <fields>
   <field name="Id" type="int" indexed="true" stored="true" required="true" /> 
   <field name="Name" type="text" indexed="true" stored="true"  required="false" />
   <field name="ShortDescription" type="text" indexed="true" stored="true" required="false" />
   <field name="FullDescription" type="text" indexed="true" stored="false" required="false" />       

   <field name="_version_" type="long" indexed="true" stored="true"/>

 </fields>


    <uniqueKey>Id</uniqueKey>
    <copyField source="Name" dest="NameCopy"/>      
    <defaultSearchField>Name</defaultSearchField>
    <solrQueryParser defaultOperator="OR"/>
</schema>

添加 solr.PorterStemFilterFactory 后,一些特定的词(如电池、创新等)变得不可搜索。

为什么会这样?我还尝试了另一个过滤器工厂来进行词干提取和语言分析,但它们的行为也与此相同。

请帮我。我很困惑这里出了什么问题!

4

1 回答 1

1

那是因为 Porter 词干在对它们进行标记时会改变你的话。

您还必须在索引时对您的字段应用相同的词干算法。在您的情况下,在该部分下添加以下<analyzer type="index">行:

<filter class="solr.PorterStemFilterFactory"/>

看看这个页面,看看 PorterStemmer 如何处理你的话:http: //9ol.es/porter_js_demo.html

于 2013-08-13T09:13:19.520 回答