我试图让同义词在具有空白的术语上工作,这显然是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结果,除非我自己手动添加连字符。
答案 0 :(得分:1)
Solr的缺点是在调用分析器之前,空间解析会发生。因此你的黑客不应该工作。这是在修复过程中,但还没有准备好。需要注意的问题是SOLR-9185
尝试将您的查询作为短语发送(&#34;引用字符串&#34;)。或者使用Field Query Parser将您的文本通过本地参数变量发送。
或者您可能有兴趣尝试免费的第三方Match Query Parser。