1

ML をドキュメント ストアとして使用するエンタープライズ アプリケーションを開発しています。ML には、ビジネスに関連する多数の XML 文書が格納されています。

ビジネス ロジックを実装するには、フィルターを適用して XML を取得するコードが必要です。お気に入り: element_tag_1 = value1 && element_tag_2 > value2 || element_tag_3 = value2

元:emp_name = John && age > 40 || <available> != false

ここには 2 つの部分があります。

  1. 演算子「||」および論理グループ化のための「&&」
  2. 比較のための演算子 >、<、=、および !=

現在、以下のコードを使用してクエリを生成し、実行しています。[「emp_name」と検索テキスト「John」はプログラムで挿入されます。以下のスニペットには示されていません]

StringBuilder sb = new StringBuilder();
sb.append("<search:search xmlns:search=\"http://marklogic.com/appservices/search\">");
sb.append(" <search:query>");
sb.append("     <search:value-query>");
sb.append("         <search:element name=\"emp_name\"/>");
sb.append("         <search:text>John</search:text>");
sb.append("     </search:value-query>");
sb.append(" </search:query>");
sb.append(" <search:options>");
sb.append("     <search:sort-order type=\"xs:string\" collation=\"http://marklogic.com/collation/\" direction=\"descending\">");
sb.append("         <search:element name=\"filterName\"/>");
sb.append("     </search:sort-order>");
sb.append(" </search:options>");
sb.append("</search:search>");

QueryManager queryMgr = client.newQueryManager();
SearchHandle resultsHandle = new SearchHandle();
RawQueryDefinition query = queryMgr.newRawCombinedQueryDefinition(new StringHandle(sb.toString()));
query.setCollections(BaseDataConstants.FILTER_COLLECTIONS);
queryMgr.search(query, resultsHandle);

上記のアプローチは正しいですか?

問題 1: 上記のコードでは、ドキュメントの emp_name = John のみをクエリしています。emp_name = John && age > 40 のように、複数の値クエリを論理グループ化して使用するにはどうすればよいですか?

問題 2: 現在、デフォルトで行われている = to 比較のみを行っています。ここで演算子を導入して、値クエリで > 、 < 、および != をチェックするにはどうすればよいでしょうか。

4

1 に答える 1