2012-04-02 10 views
2

Edismaxパーサーを使用して、Solrテキストフィールドにアスタリスク/クエリーマークを含むドキュメントを検索しようとしています。通常のテキスト(fq={!edismax}textfield:*sometext*)を検索する場合、またはエスケープ(fq={!edismax}textfield:*\~*)を使用してspecial Lucene characterを検索する場合でも、すべてが完全に機能します。Edismaxで主要なワイルドカードを使用すると、エスケープされたアスタリスク/クエリーマークがエスケープしない

しかし、これらの文字は、すべての文書が返されているので、エスケープされていないように見える*fq={!edismax}textfield:*\**)または?fq={!edismax}textfield:*\?*)を検索するとき。エスケープ文字(\*の代わりに\%2Aなど)の場合はURL encodingも試しますが、結果は同じです。

問題がfq={!edismax}textfield:\**以来、唯一の懸念をリードするワイルドカードに表示され、fq={!edismax}textfield:\?*正しい結果を返しますが、fq={!edismax}textfield:*\*fq={!edismax}textfield:*\?は(などと同様にfq={!edismax}textfield:*sometext\*)しないでください。

*/?を検索するには、Edsteraxを先頭にアスタリスクのワイルドカードを使用しますか?

答えて

0

アスタリスクを引用するとわかります。このクエリは、タイトルにスタンドアロンのアスタリスクと私のインデックスに2冊の本を見つけた:

ここ
title:"*" 

は、そのうちの一つのタイトルです:「* *行い、公式陸軍リーダーシップマニュアルから適応知ること」。

私はSolr 3.3でedismaxを使用しています。

+0

WhitespaceTokenizerFactoryのようなトークナイザを使用すると、私はうまくいくはずです。しかし、私はフレーズの厳密な一致を探し、KeywordTokenizerFactoryを使用する必要があります。したがって、フィールドテキストの一部を見つけるには、ワイルドカードを使用する必要があります。 – dev4

+0

各フィールド値を単一のトークンとして扱わずにフレーズの厳密な一致を得ることができるはずです。トークンに対して正規表現を実行することは、本質的に全テーブルスキャンです。これは、スケールされないことが保証されています。私は別のアプローチをお勧めします。 –

関連する問題