2
我想要使用ML Java API來運行聚合查詢,並且遇到了一些麻煩。我遵循了文檔,但是有一個值約束的要求,我不確定那應該是什麼樣子。我試過以下內容:使用Java API的Marklogic聚合查詢
String options =
"<options xmlns:search=\"http://marklogic.com/appservices/search\">" +
" <values name=\"average\">" +
" <range type=\"xs:string\">" +
" <element ns=\"\" name=\"content-id\"/>" +
" </range>" +
" </values>" +
"</options>";
StringHandle handle = new StringHandle(options);
QueryOptionsManager optMgr = client.newServerConfigManager().newQueryOptionsManager();
optMgr.writeOptions("average", handle);
QueryManager queryManager = client.newQueryManager();
StructuredQueryBuilder queryBuilder = queryManager.newStructuredQueryBuilder();
ValuesDefinition valuesDefinition = queryManager.newValuesDefinition("average");
valuesDefinition.setAggregate("avg");
valuesDefinition.setQueryDefinition(queryBuilder.value(queryBuilder.element("content-id"),contentId));
ValuesHandle results = queryManager.values(valuesDefinition, new ValuesHandle());
我採取了一些基於我正在使用的其他選項的選項刺。但是,當我嘗試編寫它告訴我的選項無效的內容:意外的負載。
我感覺我正在以這種錯誤的方式前進。基本上我想查找元素「content-id」中具有給定值的所有文檔,然後獲取另一個名爲「star-rating」的元素的平均值。
應該爲「content-id」還是「star-rating」設置選項?該文檔不顯示使用queryDefinition,我應該刪除它嗎?修改它?在Java中有更簡單的方法嗎?
編輯:忘了提,我也創建了一個元素範圍索引content-id與字符串類型。
你是正確的添加setQueryDefinition過濾「content-id」。但是,您不需要*使用選項按「content-id」中的給定值進行篩選。只需使用queryBuilder.range()而不是queryBuilder.value()。您需要在「」下的選項中選擇「星級評定」,並且您的valuesDefinition應以此爲中心。 –
@SamMefford我更改爲範圍()並修改了選項,並將star-rating替換爲content-id,但出現錯誤,說**無效參數:沒有值或元組規範名爲:star-rating ** –
嘗試谷歌搜索錯誤,但我沒有得到任何東西 –