在Solr中,同义词filterfactory扩展与分隔符+;WordDelimiterFilterFactory=>;奇怪的结果查询

在Solr中,同义词filterfactory扩展与分隔符+;WordDelimiterFilterFactory=>;奇怪的结果查询,solr,lucene,Solr,Lucene,以下是我的查询分析器定义: <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="companysyns.txt" ignoreCase="true" expand="true"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts

以下是我的查询分析器定义:

<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="companysyns.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
当我发送这样的查询时:

inc, inc., incorporated
test:"some company inc"
我在solr调试中看到了这个意外的结果:

<str name="rawquerystring">test:"some company inc"</str>
<str name="querystring">test:"some company inc"</str>
<str name="parsedquery">
MultiPhraseQuery(test:"some company inc (inc incorporated)")
</str>
<str name="parsedquery_toString">test:"some company inc (inc incorporated)"</str>
哪个匹配

如果我保留了
WordDelimiterFilterFactory
,但从同义词中删除了“inc.”条目(带句点的条目),那么它也可以工作:

<str name="rawquerystring">test:"some company inc"</str>
<str name="querystring">test:"some company inc"</str>
<str name="parsedquery">
MultiPhraseQuery(test:"some company (inc incorporated)")
</str>
<str name="parsedquery_toString">test:"some company (inc incorporated)"</str>
测试:“某公司”
测试:“某公司”
多重措辞(测试:“某公司(公司注册)”)
测试:“某公司(股份有限公司)”
你知道为什么
WordDelimiterFilterFactory
会弄乱同义词扩展查询吗


谢谢

WordDelimiterFilterFactory删除inc.中的点。更改过滤器的顺序,它应该可以正常工作:

    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.SynonymFilterFactory" synonyms="companysyns.txt" ignoreCase="true" expand="true"/>


我最后就是这么做的。但是为什么WordDelimiterFilterFactory在删除点时会把查询搞得如此糟糕呢?你能解释一下WordDelimiterFilterFactory是如何创建这个:test:“某家公司(公司注册)”我本以为它更像test:“某家公司(公司注册)”吗
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.SynonymFilterFactory" synonyms="companysyns.txt" ignoreCase="true" expand="true"/>