2010-12-08 64 views
1

最近我们添加了Lucene(2.4.1)支持我们的应用程序与Jackrabbit(1.6.2)一起工作。我们已经完成了所有喜欢它在jackrabbit教程中描述的。所有的作品都很好。但是我注意到了一些奇怪的行为,并且找不到关于它的任何文档。我决定向你询问这件事。Lucene Jackrabbit

例如:我有以下的节点文本:在JCR(JCR内容):data属性

The quick brown fox jumps over the lazy dog 
[email protected]#$%^& 
travmik! 
tra!vmik 

我的XPath查询如下:

String query = "root/element(*,my:documentBody) 
         [jcr:contains(*/*/element(*),'*" + param +"*')]"; 

然后我尝试搜索: “qu”,“quic”,“quick”,“k”,“ck”,“ick”,“uick”,“快速棕色狐狸”,“快速狐狸” ,“tra”,“travmik”,“mik” - 全部找到了ok

“tra!vmik”,“travmik!”,“!@#$” - nothing

而且,我逃过了this的所有特殊字符。

我做错了什么?

P.s.我还有一个问题 - 在Lucene文档中说“你不能使用*或?符号作为搜索的第一个字符”,但我使用它并且工作。为什么?

回答

0

我发现了这个问题。这是一些与提取器相关的误解,这些提取器用于插件中的索引内容。我不想详谈,但可以说,这段代码从提取器之一,是我所有的问题的原因:

if (!Character.isLetterOrDigit(c)) { 
    if (!space) { 
     space = true; 
     buffer.append(' '); 
     continue; 
    } 
    continue; 
} 

如果有人很关心这个 - 我可以更详细解释。