gpt4 book ai didi

xml - 全文 Xquery (Lucene/KWIC) 对 "tagged"结果不起作用。 eXist-db 错误?

转载 作者:行者123 更新时间:2023-12-03 18:59:38 25 4
gpt4 key购买 nike

阅读了 XQuery 文档和 eXist-db 文档后,我想不通。
如果将结果放在标签中,则使用 KWIC 进行全文搜索将不起作用。
说明
XML 文件

<root>
<node>blablabla</node>
<node>blab KEYWORD labla</node>
<node>blablabla</node>
</root>
索引配置(collection.xconf)
<collection xmlns="http://exist-db.org/collection-config/1.0">
<index xmlns:xs="http://www.w3.org/2001/XMLSchema">
<lucene>
<text qname="root"/>
<text qname="node"/>
</lucene>
</index>
</collection>
没有“标记”结果的 XQuery(有效)
(看 return $node)
let $my_texts := 
for $node in collection("path_to_my_collection")//node
return
$node

for $my_hit in $my_texts[ft:query(., "KEYWORD")]
return
$my_hit
上面的 Xquery 代码有效,我得到了一个结果。
1
<node>blab KEYWORD labla</node>
但是当启动全文搜索的第一个结果被放入标签时,它不起作用。 (我的整个查询更复杂,我需要将此结果放入标记中,以便在代码的另一个位置使用它。)
带有“标记”结果的 XQuery(不起作用)
(看 return <tag>{$node}</tag>)
let $my_texts := 
for $node in collection("path_to_my_collection")//node
return
<tag>{$node}</tag>

for $my_hit in $my_texts[ft:query(., "KEYWORD")]
return
$my_hit
此查询返回 0 结果。
当我这样调试时:
用于调试的 XQuery
let $my_texts := 
for $node in collection("path_to_my_collection")//node
return
<tag>{$node}</tag>

return
$my_texts
我明白了:
1
<tag>
<node>blablabla</node>
</tag>

2
<tag>
<node>blab KEYWORD labla</node>
</tag>

3
<tag>
<node>blablabla</node>
</tag>
我试过的:
  • 不同的路径组合:$my_texts/tag[ft:query(., "KEYWORD")] , $my_texts/tag/node[ft:query(., "KEYWORD")] , $my_texts/*[ft:query(., "KEYWORD")] , $my_texts/tag//*[ft:query(., "KEYWORD")] , $my_texts//*//*[ft:query(., "KEYWORD")]等等...
  • 添加 <tag>在索引配置中 ( <text qname="tag"/> )

  • 我错过了什么?或者它是一个 eXist-db 错误? (我的 eXist 版本:4.7.0)
    更新:
  • 感谢来自 eXist-db 邮件列表的建议。

  • 问题可能出在 缺少此中间内部结果的索引 ( return <tag>$node</tag> )。即使 <tag>已添加到索引配置中,此 <tag>建立索引时不存在...
    如果这是问题所在,那么问题是如何在中间内部结果上放置索引。甚至有可能吗?也许有人有一些线索? eXist-db 文档不是很有帮助。我发现的最接近的是: https://exist-db.org/exist/apps/doc/lucene#constructed-fields
  • 为什么我什至需要把这个<tag>这里?

  • 我有两个数据非常相似但 XML 模式不同的集合,所以我必须分别查询它们(但我需要一个共同的结果)。所以现在我对每个集合有两个全文查询,然后我合并获得的结果。我的目标是优化:从两个全文查询(慢)到只有一个(快)。为此,我执行 1) 从每个集合中选择符合我的条件的文件; 2)从选定的文件(来自两个集合)中提取我需要的数据; 3)从这个数据结构组合中间内部结果(这里我把 <tag>放在这个结果中我想进行全文查询的部分); 4)对这个组合的中间内部结果进行全文查询(只有一个)。
    也许我错了,这种方法并不是最优化的......
    更新和回答
    感谢 eXist-db 邮件列表社区,尤其是 Joe。
    答案是:

    [...] the newly constructed element has no connection to the original one(i.e., the wrapped node loses its identity), and you are no longerable to query it using the full text index [...]


    在此处查看完整答案和可能的解决方法: https://sourceforge.net/p/exist/mailman/message/37170946/
    所以我想将这个问题标记为已回答,但我不想将答案发布为我的;答案来自 eXist-db 邮件列表中的 Joe。

    最佳答案

    新构造的元素与原始元素没有任何联系(即,被包裹的节点失去了其身份)。因此,您不能再使用全文索引来查询它。
    (虽然多余,但我添加了这个,以便注册答案。如前所述,完整的讨论发生在 https://sourceforge.net/p/exist/mailman/message/37170946/. 中)

    关于xml - 全文 Xquery (Lucene/KWIC) 对 "tagged"结果不起作用。 eXist-db 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65174232/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com