0

MarkLogic を使用して、比較的大きな xml データセットをクエリしています。現在、次のような 2 つのクエリ セットを使用しています。

  1. xdmp:estimate(cts:search(fn:doc(), cts:and-query(($query, $text-query, $sent-query))))

  2. xdmp:estimate(cts:search(fn:doc(), cts:and-not-query(cts:and-query(($query, $text-query)), $sent-query)))

ここで、 $text-query := cts:word-query("coke")

$sent-query := cts:and-query((cts:element-range-query(xs:QName("score_id"),">=",$lowValue), cts:element-range-query(xs:QName) ("score_id"),"<",$hiValue)))

$query := cts:word-query("ダイエット コーク")

$lowValue:= 13264683002210000000;

$hiValue := 13264683002211000000;

両方のセット (クエリ番号 1 と 2) について、いくつかのカウントxdmp:estimateを取得していますが、一部を削除するとcts:search()クエリ 1の場合は xml が返されます。2、空のシーケンスを取得しています。

私の質問は、xml が返されない場合、クエリ番号のノードをcts:searchどのようにカウントできるかということです。2 ??xdmp:estimate

cts:and-not-query快適ではありませんがcts:element-range-query、???

xdmp:estimate注意:エラーなしでいくつかのカウントを取得しています。フィールド「 score_id 」に対して範囲インデックスが作成されます。

4

3 に答える 3

2

特に、「見積もり」はインデックスのみを使用します。「高速フレーズ」インデックスがない場合、「ダイエット コーク」というフレーズがドキュメント内にあるかどうかをインデックスから直接判断することはできません。代わりに、クエリの「インデックス解決」フェーズでインデックスを使用してすべてを検索します。 「ダイエット」と「コーラ」の両方を含む文書。後で実際のクエリでは、これらの候補ドキュメントを「フィルタリング」して、2 つの単語が実際に隣り合っているかどうかを確認します。

「インデックスの解決」と「フィルタリング」に特に注意して、MarkLogic検索開発者ガイドを参照してください。

于 2012-08-22T05:00:13.407 に答える
1

問題はおそらくxdmp:estimate、実際にヒットするだけでなく、潜在的にヒットする可能性のあるフラグメントの数 (誤検知も) を示すためです。

毎回正しい結果が得られるので、fn:count代わりに使用してみてください。唯一の問題は、より遅いことです。xdmp:estimatexdmp:estimate

詳細情報: MarkLogic サーバー: 検索開発者ガイド 第 11 章

于 2012-08-21T17:44:45.990 に答える