0

我有一个包含大量文档的集合。

当我搜索集合时,我需要获取独立于文档的匹配列表。所以如果我搜索“ 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-node”......

谢谢!

4

4 回答 4

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/*
于 2012-06-09T19:03:17.987 回答
0

我建议您查看Search APIhttp://community.marklogic.com/pubs/5.0/books/search-dev-guide.pdfhttp://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(&quot;/foo.xml&quot;)" score="328" 
        confidence="0.807121" fitness="0.901397">
    <search:snippet>
        <search:match path="fn:doc(&quot;/foo.xml&quot;)/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>

在这里,您可以看到每个结果都定义了一个或多个匹配元素。

于 2012-06-08T14:43:43.370 回答
0

您需要将文档拆分(将其分段)为较小的文档。每个文本节点都可以是一个文档,并带有存储的原始 xpath,这样上下文就不会丢失。

于 2013-03-19T09:20:56.757 回答
0

您将如何确定独立于文档的单词的相关性?相关性是文档相关性的度量,而不是单词相关性。我不知道如何衡量单词相关性。

您可能会返回按文档相关性排序的所有单词,然后返回“ document order”中每个文档的单词,这意味着它们在文档中出现的顺序。search:search在迭代所有结果并提取每个匹配词的地方,这将相对容易。每场比赛你会展示什么?它周围的片段?

请记住,您所要求的可能需要很长时间才能执行。

于 2012-06-08T18:21:58.827 回答