当我尝试在具有特殊字符的术语中使用通配符进行查询时,我遇到了问题。
作为一个示例,如果我索引"Test::Here"
,我使用通配符?
搜索"TE?T\:\:Here"
(注意:我转义了':')。我没有得到任何结果。我使用标准分析器和查询器进行索引和搜索。
有人遇到类似问题吗?
答案 0 :(得分:2)
StandardAnalyzer
使用StandardTokenizer
,因此Test::Here
被视为两个令牌:Test
和Here
。通配符查询不是通过分析器运行的,因此您最终会将冒号与不包含冒号的条件进行匹配。您需要使用不同的标记生成器,例如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中根本没有分析通配符,因此您必须确保查询字词的大小写符合索引条件的大小写(之后)分析)。