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を先頭にアスタリスクのワイルドカードを使用しますか?
WhitespaceTokenizerFactoryのようなトークナイザを使用すると、私はうまくいくはずです。しかし、私はフレーズの厳密な一致を探し、KeywordTokenizerFactoryを使用する必要があります。したがって、フィールドテキストの一部を見つけるには、ワイルドカードを使用する必要があります。 – dev4
各フィールド値を単一のトークンとして扱わずにフレーズの厳密な一致を得ることができるはずです。トークンに対して正規表現を実行することは、本質的に全テーブルスキャンです。これは、スケールされないことが保証されています。私は別のアプローチをお勧めします。 –