2017-05-18 34 views
0

我在collection.xconf以下的Lucene索引Lucene搜索

<lucene> 
    <text qname="tei:text" /> 
    <text qname="tei:summary"/> 
    <text qname="tei:placeName"/> 
</lucene> 

然后我的XQuery代码,使下面的查询:

let $query-results := ($documents[.//tei:text[ft:query(., $q)]], 
        $documents[.//tei:summary[ft:query(., $q)]], 
        $documents[.//tei:placeName[ft:query(., $q)]]) 

现在我想,说,搜索:

-pommern erik 

现在都在查询结果中的文档有字“埃里克”,而不是 字在地的内容,“Pommern酒店”:文本标签。

但一些结果必须在 地既“埃里克”和“Pommern酒店”:总结标签。

如何让我的XPath,以便用户可以在所有三个标签 使用Lucene语法搜索(这样三个标签的内容显示为 一个文本)?

回答

0

在你正在做的结果的一个联合的那一刻,你需要一个交叉点来代替。

要做到这一点,你真的需要查询对父母和与谓词一起,是这样的:

$documents[ft:query(.//tei:text, $q)][ft:query(.//tei:summary, $q)][ft:query(.//tei:placeName, $q)] 
+0

谢谢你的答案。不幸的是这太限制了。从该查询结果仅返回与总结和文字都“埃里克”的结果。 我想是把三个标记的内容,就像是一个标签的内容查询。例如: $ documents [ft:query(。tei:text + .//tei:summary + .//tei:placeName,$ q)] – user2728690

+0

建立在Adam的答案和您的回复上,试试这个:' $ documents [ft:query(.// tei:text,$ q)或ft:query(.// tei:summary,$ q)或ft:query(。tei:placeName,$ q)]' – joewiz

+0

上面的or查询返回618个结果,问题中的结果返回864个结果。但不幸的是,这两个结果仍然包含摘要中带有“pommern”一词的结果。现在的文本标签的(工作),因为其他的结果会混淆用户:我们决定只在地的内容搜索。 – user2728690