これが私のクエリアナライザの定義です:
<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"/>
「companysyns.txt」には、次のような一般的な会社の単語の拡張がいくつかあります。
inc, inc., incorporated
このようなクエリを送信すると、次のようになります。
test:"some company inc"
solrdebugでこの予期しない結果が表示されます。
<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>
「SomeCompany、Inc。」とは一致しません。しかし、を削除するWordDelimiterFilterFactory
と、同じクエリに対して、次のように表示されます。
<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
同義語拡張クエリを台無しにする理由はありますか?
ありがとう!