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しているのは、「 e」match-nodeではなく「」であることです...document-nod

ありがとう!

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 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(&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>

ここでは、すべての結果に 1 つまたは複数の match 要素が定義されていることがわかります。

于 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 に答える