使用通配符转义lucene中的特殊字符和查询

时间:2011-10-20 20:45:40

标签: lucene lucene.net

当我尝试在具有特殊字符的术语中使用通配符进行查询时,我遇到了问题。 作为一个示例,如果我索引"Test::Here",我使用通配符?搜索"TE?T\:\:Here"(注意:我转义了':')。我没有得到任何结果。我使用标准分析器和查询器进行索引和搜索。

有人遇到类似问题吗?

3 个答案:

答案 0 :(得分:2)

StandardAnalyzer使用StandardTokenizer,因此Test::Here被视为两个令牌:TestHere。通配符查询不是通过分析器运行的,因此您最终会将冒号与不包含冒号的条件进行匹配。您需要使用不同的标记生成器,例如WhitespaceTokenizer

答案 1 :(得分:1)

您无法搜索未编入索引的内容。下面是一个代码,用于查看您的索引。

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();
}

答案 2 :(得分:0)

Artur是对的,但还有另一个需要考虑的问题是Lucene中根本没有分析通配符,因此您必须确保查询字词的大小写符合索引条件的大小写(之后)分析)。