2

Marklogic データベースには約 20 個の lacs ドキュメントがあります。ページネーションのために、検索アプリケーション内のドキュメントの総数が必要です。私が使用している合計を取得するために

xdmp:estimate(cts:search(doc(), $query))

ここで、$query は で結合されたさまざまなクエリの組み合わせですcts:and-query。しかし、私は正しい合計を取得していません。$query が空白の場合、データベース内のドキュメントの総数よりもはるかに多くの数が表示されます。私が使うとき

xdmp:estimate(doc())

正しい合計が表示されますが、クエリによって変化しない静的な合計になります。特定のクエリに応答して返された結果に応じた合計が必要なため、引数として $query を渡しましたが、正しい合計が表示されません。fn:count()は正しい合計を表示しますが、ドキュメントの数が約 20 ラックの場合、は より遅いfn:count()ため機能しません。 fn:count()xdmp:estimate()

ユーザーが入力した検索語句に対して返されるドキュメントの正確な合計数を取得するのを手伝ってください。

4

2 に答える 2

10

ここで何が起こっているのかを理解するには、http://resources.marklogic.com/library/media/inside-marklogicにあるアーキテクチャのホワイトペーパーを読むことから始めてください。

次に、このテスト ケースを試してください。

xdmp:estimate(doc()),
xdmp:estimate(cts:search(doc(), ()))

最初の式は、データベース内のドキュメントの数をカウントします。2 番目の式は、データベース内のドキュメント フラグメントの数をカウントします。したがって、結果が異なる場合は、フラグメント ルートまたはフラグメントの親が構成されている可能性があります。いくつかの特別なドキュメントも余分なフラグメントを作成します: スペリング辞書とシソーラス ドキュメントがこれを行うと思います。

推定を XML ドキュメント ルートに制限する場合は、検索可能な式でドキュメント ルート QName を指定する/*か、ルート要素名を気にしない場合に使用します。

xdmp:estimate(cts:search(/*, ()))

cts:query 引数を使用して、カウントするドキュメントにのみ表示される QName を指定することもできます。

于 2012-05-18T15:49:56.910 に答える
1

あなたの質問がわかりません。データベース内のドキュメントの総数または検索に一致するドキュメントの総数が必要ですか?

xdmp:estimate正しい方法ですが、それはESTIMATEにすぎません。見積もりで使用されるクエリがインデックスから完全に解決できる場合、見積もりは 100% 正しいものになります。ただし、インデックスからクエリを完全に解決できない場合 (フィルタリングが必要)、見積もりは多少ずれます。これはxdmp:estimate、インデックスのみを使用してカウントを行うためです。と比較fn:count(cts:search(doc(), $query))してくださいxdmp:estimate(cts:search(doc(), $query))。特定のクエリの結果が大幅に異なる場合は、そのクエリをサポートするために追加のインデックス作成を有効にするか、違いを受け入れる必要があります。

于 2012-05-18T15:11:12.793 に答える