0

私はSolrに比較的慣れていないので、明らかな何かが欠けている場合はご容赦ください。ユーザーがミュージシャンを検索できるアプリケーションがあります。インデックス作成は、正しいスペルの読み取り専用データベースから取得されるため、インデックス側で把握しました。

ただし、クエリ側では、さまざまなスペルの誤り/違いを予測する必要があり、solrがそれらのインスタンスを見つけるのを支援したいと思います。私たちの古い自家製の検索ソリューションから、正規表現とそれらが適用されるアーティストのリストがあります。PatternReplaceCharFilterFactoryを使用してそれらをsolrに変換しようとしたとき、完全に機能するものもあれば、まったく機能しないものもあることに気付きました...それらの間に韻も理由もないようです。

例えば:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="em[ei]n[ei]m" replacement="Eminem"/>

エミネムの一般的なスペルミスを正確にキャプチャします。しかし、バンド311の場合:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Tt]hree [Ee]leven" replacement="311"/>

動作しません。別の例は、ナインインチネイルズです。

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="((nine|9).*inch.*nails\b)|(n\.? ?i\.? ?n\.?\b)" replacement="Nine Inch Nails"/>

バンド名の最も一般的なパターンを見つけるのに最適です。しかし、イブ6の場合:

       <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Ee]ve.{0,4}([Ss]ix|6)" replacement="Eve 6"/>

このフィルターの使用法に欠けている基本的なものはありますか?私は上記の正規表現でいくつかのバリエーションを試しましたが(「スリーイレブン」のようなリテラルを使用することさえあります)、それでも成功しませんでした。問題のフィルターをアナライザーで唯一のPatternReplaceCharFilterFactoryにしようとしました。また、正しいスペルを検索すると適切な結果が返されるため、これらのアイテムが正しくインデックスに含まれていることも確かです。

助言がありますか?

スノーダル

4

2 に答える 2

3

問題はあなたの Char Factory にあるのではなく、結局何が起こるか、特にトークナイザーにあるのではないかと思います。標準のトークナイザーを使用すると、ストリームに入力したばかりの数値が削除されます。テキストをトークンに分割する必要がない場合は、代わりにKeywordTokenizerFactoryを参照できます。

一般に、Solr 4+ でこれをトラブルシューティングする最善の方法は、Admin WebUI の [分析] 画面です。特定のフィールド タイプに対してテキストを入力し、分析チェーンの各コンポーネントの後でテキストがどうなるかを確認できます。

于 2013-03-05T04:31:09.573 に答える
0

あなたが説明する種類のアプリケーションには SynonymFilter を使用することをお勧めします。次のような単語とその同義語をリストする外部ファイルを提供できます。

eminem <=> emenem
nine <=> 9

これの前に LowerCaseFilter を付けておけば、シノニムの大文字と小文字の正規化について大騒ぎする必要はありません。トークン化しない限り、311 ケースも処理できるはずです (つまり、Alexander Rafalovitch が提案したように KeywordTokenizer を使用します)。

于 2013-03-05T04:36:59.383 に答える