代码之家  ›  专栏  ›  技术社区  ›  raj247

停止同义词。阻止txt文件Solr

  •  0
  • raj247  · 技术社区  · 8 年前

    在同义词中。txt文件我有一个条目 marine => saltwater,marine 但这两个词的词干都是 'saltwat', 'marin' 分别保存在受保护的文字文件中。有办法避免吗?

    架构。xml

     <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.ASCIIFoldingFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.EnglishPossessiveFilterFactory"/>
          <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
          <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
          <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
          <filter class="solr.ASCIIFoldingFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.EnglishPossessiveFilterFactory"/>
          <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
          <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
          <filter class="solr.PorterStemFilterFactory"/>
          <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" analyzer="org.apache.lucene.analysis.en.EnglishAnalyzer" />
        </analyzer>
      </fieldType>
    

    同义词。txt文件

    marine => saltwater,marine
    

    protwords。txt文件

    saltwater
    marine
    

    现在,当我在管理面板中进行分析并查询 saltwat saltwat | marin 出现了。也就是说海水确实被堵住了 在同义词中。txt文件 saltwat | marin

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alessandro Hoss    8 年前

    solr分析的工作顺序与您在模式的字段类型定义中声明它的顺序相同。因此,如果在同义词过滤器之后声明任何干过滤器,它将在同义词更改后应用。如果您不希望这样,应在StemFilter之后配置同义词过滤器,例如:

    <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.ASCIIFoldingFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.EnglishPossessiveFilterFactory"/>
          <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
          <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
          <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
          <filter class="solr.ASCIIFoldingFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.EnglishPossessiveFilterFactory"/>
          <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
          <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
          <filter class="solr.PorterStemFilterFactory"/>
          <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
        </analyzer>
      </fieldType>
    

    我建议你检查一下 Solr Analysis Solr管理员中的工具,用于检查字段在索引和查询时间方面的情况。

    如果需要更多帮助,请共享您的架构。

        2
  •  0
  •   Oyeme    8 年前

    Protwords(受保护词)是由 英语波特词干分析器,你不想被词干。

    可以使用模式中的“protected”属性指定自定义的受保护单词列表。Solr中的任何词干分析器都不会修改受保护单词列表中的任何单词。

    <fieldtype name="myfieldtype" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
        <filter class="solr.PorterStemFilterFactory" />
      </analyzer>
    </fieldtype>