2017-05-12 12 views
1

xmlおよびjsonドキュメントをデータベースに保存しました。私のユースケースは、ドキュメントの作成日がT> 2で、Tが現在の日付であると言うことができるすべてのドキュメントを取得する必要があるということです。 したがって、ドキュメントの作成日とその他のドキュメントプロパティをドキュメントのメタデータに追加しました。ドキュメントに必要なすべてのプロパティを挿入して取得できます。しかし、メタデータのプロパティで日付範囲の検索を実行できますか?Java APIを使用してドキュメントメタデータの範囲検索を実行

私はStructuredQueryBuilderを使用していますが、プロパティメソッドを使用してプロパティ名を取得して値を取得しますが、これをレンジ検索に変換する方法はあまりありません。

+1

Java Guideの「構造化クエリの例」の最初の例は、「日付範囲の構造化クエリ」であり、ニーズに合っていますか? http://docs.marklogic.com/8.0/guide/java/searches#id_66534 –

+0

「例:ドキュメントプロパティの構造化クエリ」も参照http://docs.marklogic.com/8.0/guide/java/searches#id_74535 StructuredQueryBuilder.propertiesメソッド。それにもかかわらず、以下のジャスティンのコメントがより役に立ちます。プロパティを保持するのがベストです。 –

+0

こんにちはサム..返事をありがとうが、最初のリンクは、XMLまたはデータコンテンツの日付範囲の例を提供するのに対し、2番目のリンクはプロパティの定数値を検索するための例を提供します。私の使用例は、ドキュメントのプロパティの範囲検索を行うことです。コンテンツとプロパティの両方の範囲検索が同じように機能していますか?例システム日付に範囲インデックスがあり、次のようなクエリを発行しています.... {code} Sqb.properties(Sqb.and(Sqb.range(constraint_name、type、operator、value))) {code } – Kiras

答えて

2

可能であれば、のドキュメントプロパティを避けることをお勧めします。ドキュメントとそのプロパティを照会するには、MarkLogicのストレージ単位である2つの別々のフラグメント間の結合が必要です。結合は高価で、特に規模が大きい。メタデータはドキュメント自体に置く必要があります。メインコンテンツから分離する必要がある場合は、エンベロープラッパーを作成できます。例えば、Customerエンティティを表し文書を包む、

{ 
    "metadata": { 
    "createDate": …, 
    "author": …, 
    "hash": …, 
    … 
    }, 
    "contents": { 
    "customer": { 
     … 
    } 
    } 
} 

上記はJSONですが、あなたにもXMLのために同じ手法を使用することができます。

1

MarkLogic 9の新機能である非表示のメタデータフィールドを使用することもできます。プロパティの名前のみを指定してメタデータフィールドを作成し、タイプフィールド範囲インデックスを作成します。他のフィールドとして使用しますが、これらのメタデータフィールドの値は、最適なパフォーマンスを得るためにドキュメントフラグメントに内部的に関連付けられていても、ドキュメントの一部として表示されません。値を設定するにはxdmp:document-set-metadataのようなコマンドを使用し、MarkLogic REST APIの/v1/documentsエンドポイントを使用してこれを行う方法もあります。

HTH!

関連する問題