我有一个包含大量文档的集合。
当我搜索集合时,我需要获得一个独立于文档的匹配列表。所以,如果我搜索“pie
”这个词。我会找回一份文件清单,按相关性进行适当排序。但是,其中一些文档在多个地方包含“pie
”一词。我想找回所有匹配项的列表,与找到匹配项的文档无关。此外,所有命中列表都需要按相关性(权重)排序,同样完全独立于文档(未按文档分组)。
按照代码搜索并返回按文档分组的匹配...
let $searchfor := "pie"
let $query := cts:and-query((
cts:element-word-query(xs:QName("title"), ($searchfor), (), 16),
cts:element-word-query(xs:QName("para"), ($searchfor), (), 10)
))
let $resultset := cts:search(fn:collection("docs"), $query)[0 to 100]
for $n in $resultset
return cts:score($n)
我需要$n
成为“match-node
”,而不是“document-nod
e”......
谢谢!
答案 0 :(得分:1)
文档相关性由TFIDF
确定。匹配有助于文档的分数,但没有相对于彼此的分数。 cts:search
已经返回按文档相关性排序的结果,因此您可以执行此操作以获取按其祖先文档分数排序的匹配节点:
let $searchfor := "pie"
let $query := cts:and-query((
cts:element-word-query(xs:QName("title"), ($searchfor), (), 16),
cts:element-word-query(xs:QName("para"), ($searchfor), (), 10)
))
return
cts:search(//(title|para),$query)[0 to 100]/cts:highlight(.,$query,element match {$cts:node})//match/*
答案 1 :(得分:0)
我建议您查看Search API
(http://community.marklogic.com/pubs/5.0/books/search-dev-guide.pdf和http://community.marklogic.com/pubs/5.0/apidocs/SearchAPI.html)。此API将提供您想要的,提供匹配节点以及实际文档的URI。您还应该发现在一般情况下使用它更容易,尽管会出现需要恢复到cts:search
的边缘情况。
search:search
是您要使用的特定功能。它会给你回复类似的答案:
<search:response total="1" start="1" page-length="10" xmlns=""
xmlns:search="http://marklogic.com/appservices/search">
<search:result index="1" uri="/foo.xml"
path="fn:doc("/foo.xml")" score="328"
confidence="0.807121" fitness="0.901397">
<search:snippet>
<search:match path="fn:doc("/foo.xml")/foo">
<search:highlight>hello</search:highlight></search:match>
</search:snippet>
</search:result>
<search:qtext>hello sample-property-constraint:boo</search:qtext>
<search:report id="SEARCH-FLWOR">(cts:search(fn:collection(),
cts:and-query((cts:word-query("hello", ("lang=en"), 1),
cts:properties-query(cts:word-query("boo", ("lang=en"), 1))),
()), ("score-logtfidf"), 1))[1 to 10]
</search:report>
<search:metrics>
<search:query-resolution-time>PT0.647S</search:query-resolution-time>
<search:facet-resolution-time>PT0S</search:facet-resolution-time>
<search:snippet-resolution-time>PT0.002S</search:snippet-resolution-time>
<search:total-time>PT0.651S</search:total-time>
</search:metrics>
</search:response>
在这里,您可以看到每个结果都定义了一个或多个匹配元素。
答案 2 :(得分:0)
您如何确定独立于文档的单词的相关性?相关性是文档相关性的衡量标准,而不是文字相关性。我不知道如何测量单词的相关性。
您可能会返回按文档相关性排序的所有单词,然后返回“document order
”中每个文档的单词,这意味着它们在文档中的显示顺序。使用search:search
可以相对容易,您可以迭代所有结果并提取每个匹配的单词。你会在每场比赛中出现什么?它周围的片段?
请记住,您所要求的内容可能需要很长时间才能执行。
答案 3 :(得分:0)
您需要将文档(将其分段)拆分为较小的文档。每个textnode都可以是一个文档,带有一个存储的原始xpath,这样上下文就不会丢失。