stop synonyms.txt文件Solr被阻止

时间:2017-11-14 18:53:05

标签: solr solrcloud synonym stemming

在synonyms.txt文件中,我有一个条目 marine => saltwater,marine但是,尽管受到受保护的单词文件,但这两个单词都被分别限制为'saltwat', 'marin'。有没有办法避免它?

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

synonyms.txt

marine => saltwater,marine

protwords.txt

saltwater
marine

现在当我在管理面板中进行分析并查询saltwat时,会出现saltwat | marin。这意味着saltwater确实在synonyms.txt文件中被绑定到saltwat saltwat | marin

2 个答案:

答案 0 :(得分:0)

Protwords(受保护的单词)是由词汇所阻止的单词 你不想被阻止的英国搬运工。

可以使用&#34; protected&#34;指定自定义受保护的单词列表。架构中的属性。 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>

答案 1 :(得分:0)

solr分析的工作方式与您在schema中的fieldType定义中声明的顺序相同。因此,如果在Synonyms过滤器之后声明任何Stem过滤器,它将在同义词更改后应用。如果你不想这样,应该在StemFilter之后配置SynonymsFilter,例如:

<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管理员中的Solr Analysis工具,以检查您的字段在索引和查询时间内发生了什么。

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