最近我们为我们的应用程序添加了Lucene(2.4.1)支持,该应用程序与Jackrabbit(1.6.2)一起使用。我们已经完成了像jackrabbit教程中描述的所有内容。所有的作品都很好。但我注意到一些奇怪的行为,无法找到任何关于它的文档。我决定问你这件事。
例如:我在jcr:data属性
中的Node(jcr:content)中有以下文本The quick brown fox jumps over the lazy dog
!@#$%^&
travmik!
tra!vmik
我的XPath查询如下:
String query = "root/element(*,my:documentBody)
[jcr:contains(*/*/element(*),'*" + param +"*')]";
然后我尝试搜索:
“q”,“qu”,“qui”,“quic”,“quick”,“k”,“ck”,“ick”,“uick”,“quick brown fox”,“quick fox”, “tra”,“travmik”,“mik” - 一切顺利
“tra!vmik”,“travmik!”,“!@#$” - 没什么
而且,是的,我从this转义了所有特殊字符。
我做错了什么?
P.S。我还有一个问题 - 在Lucene文档中说“你不能使用*或?符号作为搜索的第一个字符”,但我使用它并且它有效。为什么呢?
答案 0 :(得分:0)
我发现了问题。与提取器有一些误解,它们用于长耳兔用于索引内容。我不想详细介绍,但可以说这一段Extractors的代码是造成我所有问题的原因:
if (!Character.isLetterOrDigit(c)) {
if (!space) {
space = true;
buffer.append(' ');
continue;
}
continue;
}
如果有人对此感兴趣 - 我可以更详细地解释。