2

誰かがこれに対する簡単な答えを知っていれば、エスケープされた文字列を使用して余分なインデックスを作成したり、きれいなコードを散らかしながら目をつぶったりする必要はありません。

基本的に、実行中の Lucene 検索は文字以外の文字を処理できません。スペース、パーセント記号、ドット、ダッシュ、スラッシュなど、何でも構いません。どこでエスケープしてもしなくても、これらの文字を含むアイテムを検索できないため、これは非常に腹立たしいことです。

私には 2 つの選択肢があります: 別のインデックスでこれらの文字を削除し、検索している名前からそれらを削除するか、ひどい検索を停止します。

4

3 に答える 3

3

「/」を使用して特殊文字をエスケープできます。Lucene は、以下を特殊文字として扱います。機能させるには、これらの文字をエスケープする必要があります。

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ 

「2+3」を検索したい場合、クエリは「2/+3」にする必要があります

于 2009-10-19T16:10:43.233 に答える
3

QueryParser.escape(String s)クエリ文字列をエスケープするために使用します。

于 2011-11-23T17:22:25.960 に答える
1

http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#-によると

エスケープ文字はスラッシュ後方であり、前方ではありません:。

また、Ankitに答えるには、$は特殊文字ではないため、エスケープする必要はないようです。

Ralphが提案したようにダッシュをエスケープしても、私には違いはありません(ZendLucene)。単語「abc-def」にインデックスが付けられ、「abc-def」を検索すると、インデックス作成ステップでダッシュが無視されるかどうかに関係なく、どういうわけかその単語が見つかると思います。同じ入力でも同じ結果になるはずです。この単語は、2つの別個のトークン「abc」と「def」として索引付けされているようです。ただし、「abc-def」を検索しても、「abcdef」の場合は結果が得られません。

于 2013-01-18T07:27:13.423 に答える