4

Compass/Lucene を使用して、データベースの検索とインデックス作成を行っています。クエリ「foo」が「Fóo」と「foo」の両方に一致し、「fóó」のクエリが「fóo」と「fOO」に一致するように、検索時に分音記号と文字の大文字と小文字を区別しないようにします。

私が読んだ内容に基づいて、コンパスがコンテキストのインデックス作成と検索の両方で使用するデフォルトのアナライザーを変更する必要があるようです。使用するアナライザーを指定する場所はわかりましたが、要件を満たすアナライザーの実装が見つからないようです。分音記号と大文字小文字を無視するアナライザーは既に存在しますか?それとも独自に作成する必要がありますか?

4

2 に答える 2

6

org.apache.lucene.analysis.ASCIIFoldingFilter を見て、希望どおりに動作するかどうかを確認してください。そうでない場合は、そのソースを自分で作成するための出発点として使用します。

インデックス作成とクエリに同じ Analyzer 構成を使用する必要があるのは正しいことです。これは、インデックスからすべての分音符号を削除した場合、すべてのクエリからもそれらを削除する必要があるという明らかな理由からです。

注意すべきことの 1 つは、インデックス作成/クエリ プロセスのどこかで Unicode を正規化することです。詳細については、 http://unicode.org/reports/tr15/http://unicode.org/faq/normalization.html、およびhttp://docs.oracle.com/javase/6/docs/api/を参照してください。 java/text/Normalizer.html .

編集: 以下のコメントで述べたように、フィルターとして ASCIIFoldingFilter を直接アナライザーとして使用することはできませんが、ここにアナライザーに含めるための簡単な手順があります: stackoverflow.com/a/3834244/390153

編集: 以下のコメントで @jspboix が述べたように、文字の大文字と小文字を処理するために LowerCaseFilter をチェーンする必要もあります。

于 2012-06-24T23:55:59.027 に答える
0

私の Grails アプリケーションでは、検索可能なプラグインを使用し、「ドイツ語」アナライザーを使用するようにシステムを構成しました。

compassSettings = ['compass.engine.analyzer.default.type': 'German']

これは、少なくとも大文字小文字とウムラウトを無視します - "ä" はインデックスに "a" として格納されます。

「Fóo」と「Föo」をテスト ドキュメントの 1 つに追加し、「foo」を検索しました。「Föo」は見つかりますが、「Fóo」は見つかりません。したがって、言語を正しい値 (フランス語?) に切り替えると、機能するはずです。

于 2012-06-28T17:48:08.597 に答える