使用PatternReplaceCharFilterFactory进行多词同义词

时间:2017-01-30 22:50:19

标签: solr synonym

我试图让同义词在具有空白的术语上工作,这显然是solr的缺点。为了破解它,我试图使用PatternReplaceCharFilterFactory用连字符替换空格,然后用我的同义词连字:

<fieldType name="special_synonyms" class="solr.TextField">
<analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.StandardFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" />
  <filter class="solr.WordDelimiterFilterFactory"
          generateWordParts="1"
          generateNumberParts="1"
          catenateWords="1"
          catenateNumbers="1"
          catenateAll="0"
          preserveOriginal="1"
  />
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([/\s+])" replacement="-" />
  <filter class="solr.KStemFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"/>
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
</analyzer>

使用Analysis工具,当我输入多字词时,我得到正确的同义词,但是当我运行查询时,它会找到0结果,除非我自己手动添加连字符。

1 个答案:

答案 0 :(得分:1)

Solr的缺点是在调用分析器之前,空间解析会发生。因此你的黑客不应该工作。这是在修复过程中,但还没有准备好。需要注意的问题是SOLR-9185

尝试将您的查询作为短语发送(&#34;引用字符串&#34;)。或者使用Field Query Parser将您的文本通过本地参数变量发送。

或者您可能有兴趣尝试免费的第三方Match Query Parser