首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止阻止synonyms.txt文件Solr

停止阻止synonyms.txt文件Solr
EN

Stack Overflow用户
提问于 2017-11-14 18:53:05
回答 2查看 1K关注 0票数 0

在synonyms.txt文件中,我有一个条目marine => saltwater,marine,但这两个单词都分别被转换为'saltwat', 'marin',尽管它们位于受保护的words文件中。有什么办法可以避免吗?

schema.xml

代码语言:javascript
复制
 <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

代码语言:javascript
复制
marine => saltwater,marine

protwords.txt

代码语言:javascript
复制
saltwater
marine

现在,当我在管理面板中进行分析并查询saltwat时,就会出现saltwat | marin。这意味着咸水确实在synonyms.txt文件中被树干为synonyms.txt。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-15 12:46:49

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

代码语言:javascript
复制
<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分析工具,以检查您的字段在索引和查询时间内发生了什么。

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

票数 1
EN

Stack Overflow用户

发布于 2017-11-14 23:26:56

Protword(受保护词)是那些你不想被阻止的单词,它会被英语搬运工词干所阻止。

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

代码语言:javascript
复制
<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldtype>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47293243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档