特殊文字を含む用語にワイルドカードを使用してクエリを実行しようとすると問題が発生します。 例として、インデックス"Test::Here"
の場合は、"TE?T\:\:Here"
にワイルドカード?
を使用して検索します(注: ':'をエスケープしました)。私は結果が得られません。私は索引付けと検索のために標準的なアナライザーとクエスターを使用します。ルーネンとワイルドカードを使用したクエリで特殊文字をエスケープする
誰でも同じような問題が発生しましたか?
特殊文字を含む用語にワイルドカードを使用してクエリを実行しようとすると問題が発生します。 例として、インデックス"Test::Here"
の場合は、"TE?T\:\:Here"
にワイルドカード?
を使用して検索します(注: ':'をエスケープしました)。私は結果が得られません。私は索引付けと検索のために標準的なアナライザーとクエスターを使用します。ルーネンとワイルドカードを使用したクエリで特殊文字をエスケープする
誰でも同じような問題が発生しましたか?
StandardAnalyzer
はStandardTokenizer
を使用するため、Test::Here
は、2つのトークンとして見られている:Test
とHere
。ワイルドカードクエリはアナライザでは実行されないため、コロンは含まれていない用語と一致します。別のトークナイザを使用する必要があります(例:WhitespaceTokenizer
)。
インデックスを作成していないものは検索できません。以下は、あなたが索引付けするものを見るためのコードです。
var analyzer = new AnyAnalyzer();
TokenStream tokensTream = analyzer.TokenStream("", new StringReader("Test::Here"));
Lucene.Net.Analysis.Token token = tokensTream.Next();
while (token != null)
{
Console.Write("[" + token.TermText() + "] ");
token = tokensTream.Next();
}
アルトゥルは正しいですが、もう一つの問題は、あなたの問合せ語句の場合は、の場合と一致することを確認する必要がありますので、ワイルドカードの用語は、Luceneの中では、すべての分析されていないことである考慮することがあります索引付けされた用語(分析後)。