アクセントを使わない検索

トピック作成者:ks-solruserml-bot (2024/07/09 21:49 投稿)
7
OpenOpen

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

こんにちは、

私たちはSolr 6.6を使用しており、ウェブサイト上でクイックサーチを行っています。このために、いくつかのデータフィールドを「schnellsuche」というフィールドにコピーしています。これは数年前には問題なく機能していました。

現在、アクセント付きのフランス語データ(例:「thé」)をインポートしたいと考えています。ユーザーが「thé」または「the」で検索しても同じ結果が得られるようにしたいのですが、これが解決できません。

charfilterを使用していますが、これではうまくいきません。

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<field name="schnellsuche" type="text_schnellsuche" indexed="true" stored="false" multiValued="true"/>
<copyField source="articlegroup_id" dest="schnellsuche"/>
<copyField source="tree_id" dest="schnellsuche"/>
<copyField source="tree_bezeichnung" dest="schnellsuche"/>
<copyField source="tree_keywords" dest="schnellsuche"/>
<copyField source="*_txt" dest="schnellsuche"/>
<copyField source="*_int" dest="schnellsuche"/>
<copyField source="*_dec" dest="schnellsuche"/>
<fieldType name="text_schnellsuche" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.ClassicTokenizerFactory"/>
    <filter class="solr.ManagedSynonymFilterFactory" managed="german"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
  </analyzer>
</fieldType>

どなたか助けていただけませんか?

ありがとうございます、
Carsten

返信投稿者:ks-solruserml-bot (2024/07/09 21:50 投稿)

こんにちは、Karsten

MappingCharFilterFactoryは、デフォルトのISOLatin1Accent設定ファイルを使用して、ドイツ語やフランス語のアクセント文字に対して正常に機能するはずですが、あまり使われていません。代わりに、同様の役割を果たす通常のトークンフィルター <filter class="solr.ASCIIFoldingFilterFactory"/> を試してみてください。

新しい設定をアップロードまたは配置した後は、Solrコアまたはコレクションを再読み込みすることを忘れないでください。

よろしくお願いします。
Markus

返信投稿者:ks-solruserml-bot (2024/07/09 21:50 投稿)

こんにちは Markus,

返信ありがとう。

テストのためにコレクションを削除して新しいものを作成しましたが、コレクションを再読み込みしても何も変わりませんでした。

"thé" を検索すると問題ありませんが、"the" を検索すると結果が出ませんでした。
solr.ASCIIFoldingFilterFactory も試しましたが、何も変わりませんでした。 :(

よろしくお願いします。
Carsten

返信投稿者:ks-solruserml-bot (2024/07/09 21:50 投稿)

こんにちは、Karsten

あなたの設定スニペットを追加しましたが、MappingCharFilterFactory の代わりに ASCIIFoldingFilterFactory を使用して、1つのコレクションに再読み込みしました。Solrの解析ページを使用してテストしましたが、機能しています。あなたのコレクションでフィールドをテストできますか?解析は正常ですが、おそらく他に何か問題があるかもしれません。

よろしくお願いします。
Markus

[1] http://localhost:8983/solr/#//analysis?analysis.fieldvalue=th%C3%A9&analysis.query=the&analysis.fieldname=schnellsuche&verbose_output=1

返信投稿者:ks-solruserml-bot (2024/07/09 21:50 投稿)

こんにちは、Markus

ありがとうございます。別の問題があると思いますね ;) ASCIIFoldingFilterFactory を試しましたが、解析では "dèkor" が表示されて "decor" ではありませんでした。
私は3ノードのSolrクラスタを使用しており、コレクションを削除して新しいものを作成しましたが、問題があるかもしれませんか?

<dynamicField name="*_txt"  type="text_general"    indexed="true"  stored="true"/>
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
      </analyzer>
    </fieldType>

よろしくお願いします。
Carsten

返信投稿者:ks-solruserml-bot (2024/07/09 21:50 投稿)

申し訳ありませんが、お邪魔しますが、好奇心からですが、なぜ ASCIIFoldingFilterFactory はクエリの解析器にしかなく、インデクサーにはありませんか?望む結果を得るためには、両方に必要ではないでしょうか?

返信投稿者:ks-solruserml-bot (2024/07/09 21:51 投稿)

こんにちは、Karsten

インデックス解析器に ASCIIFoldingFilter を追加するのを忘れてしまったようです。以下の設定で再試行してください:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
  </analyzer>
</fieldType>

通常のテキスト検索では推奨されないため、ストップワードフィルタを削除しました。

よろしくお願いします。
Markus

返信投稿者:ks-solruserml-bot (2024/07/09 21:51 投稿)

@David & Markus

確かに、それが私の最後の問題でした。情けない限りです。 :(
スキーマについては最後の数年間何も変更していなかったので、私はSolrのプロではありません。

助けてくれて本当にありがとうございます。良い週末をお過ごしください!

よろしくお願いします。
Carsten

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

KandaSearch

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

投稿の削除

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