WordDelimiter は期待されるトークンを生成しません。

トピック作成者:ks-solruserml-bot (2024/05/28 19:31 投稿)
1
CloseClose

(The bot translated the original post https://lists.apache.org/thread/jw4rs69c0rzonfqnx1409lwqm4gj6qn4 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

フィールドの値は「bim.ClassUnderlying」であり、検索クエリは「classunderlying」ですが、結果が返されません。しかし、「classUnderlying」と検索すると、動作します。どのように変更すれば、「classunderlying」クエリでも機能するようになるでしょうか?インデックス時のアナライザーチェーンで、splitOnCaseChange の値を 1 から 0 に変更すると、機能しますが、これはしたくありません。なぜなら、classUnderlying 単語から class と underlying トークンも抽出したいからです。

以下は、フィールドタイプの定義です。

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterGraphFilterFactory" protected="protect.txt" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.FlattenGraphFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ICUNormalizer2FilterFactory" name="nfkc" mode="compose"/>
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms_en.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.FlattenGraphFilterFactory"/>
    <filter class="solr.KStemFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterGraphFilterFactory" protected="protect.txt" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ICUNormalizer2FilterFactory" name="nfkc" mode="compose"/>
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms_en_query.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.KStemFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>
返信投稿者:ks-solruserml-bot (2024/05/28 19:31 投稿)

「generateParts」/「splitOn」と「catenate」/「perserveOriginal」の両方を使用する場合、WDGF(WordDelimiterGraphFilterFactory)はグラフTokenStream構造を生成し、グラフ構造を正確に反映するためにPositionLengthAttributeに依存します。しかし、LuceneはPositionLengthAttributeをインデックスに登録しないため、この情報はインデックス時に失われます(観察しているような奇妙な検索動作が生じます)。回避策として、次のように二つのフィールドにインデックスを作成することをお勧めします:一つはインデックス時にWDGFを適用して「split」タイプの操作のみを行い、もう一つはインデックス時にWDGFを適用して「catenate」スタイルの操作のみを行います。別の代替案(異なる妥協を行う)は、Luceneインデックスから省略された「グラフエッジ」に十分な値のクエリ時ps(フレーズスロップ)を増やすことです。

(インデックス時に複数の用語の同義語がある場合、類似の問題が発生します)。

さらに関連する問題やブログ記事は以下の通りです:

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?