1

最近,我们为与 Jackrabbit(1.6.2) 一起工作的应用程序添加了 Lucene(2.4.1) 支持。我们已经按照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中转义了所有特殊字符。

我做错了什么?

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

4

1 回答 1

0

我发现了问题。在jackrabbit中用于索引内容的提取器存在一些误解。我不想详细说明,但可以说来自提取器之一的这段代码是我所有问题的原因:

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

如果有人对此感兴趣 - 我可以更详细地解释。

于 2010-12-12T17:45:01.020 回答