【发布时间】:2010-02-24 12:55:20
【问题描述】:
我在 lucene 中使用“等号”运算符进行搜索,如下所示:
return new TermQuery(new Term(getName(), getValue()));
对于像这样的 vale:customerID:YADA-UT-08ec5de9-8813-4361-be88-55695ddfaa00
这是有效的。
但是,如果我使用通过 BooleanQuery 实现的“in”运算符,例如;
final BooleanQuery booleanQuery = new BooleanQuery();
for (final String aValue : value) {
booleanQuery.add(new TermQuery(new Term(getName(), aValue)), BooleanClause.Occur.SHOULD);
}
它不会找到任何具有 YADA-UT-08ec5de9-8813-4361-be88-55695ddfaa00 的客户
经过大量测试后,我假设“YADA-UT-08ec5de9-8813-4361-be88-55695ddfaa00”或破折号的长度可能是问题所在。 (我使用令牌将其保存在数据库中)与 BooleanQuery 一起使用时。
有什么线索吗?
编辑:奇怪的是: - 这适用于“in”(布尔查询):25c20c21-bd88-4a6d-aa02-209b5fb6fb11 - 这不起作用:YADA-UT-08ec5de9-8813-4361-be88-55695ddfaa00
找到的解决方案:lucene 单词被索引为小写:)
【问题讨论】:
-
尝试在
Query对象上调用toString(),这将为您提供将要执行的内容的文本表示,并且对于调试非常有用 -
通常在索引和解析查询字符串时应该使用相同的分析器。小写过滤器是 StandardAnalyzer 的一部分。
-
仅供参考 - 如果您找到解决方案,最好将其发布为您自己问题的答案 :-)
-
请将您的解决方案作为答案发布并接受它,每天我都会看到这个问题我点击回答它只是为了意识到它已经解决了:)