2017-08-23 44 views
0

Marklogic搜索是否有可能跨文檔搜索,但只使用數組元素中的特定屬性進行搜索?此外,結果可能只包含匹配的數組元素而不包含整個文檔(因爲同一文檔中的其他數組元素可能不匹配)。內部數組或對象,並僅返回匹配數組項(JavaScript)的

實施例:給定一個JSON Marklogic文檔 { "name": "aName", "children": [{ "name": "A", "target": { "min": 2, "max": 10 } },{ "name": "B", "target": { "min": 22, "max": 32 } },{ "name": "C", "target": { "min": 4, "max": 7 } }] } 我僅想匹配children其中target.min < 5和target.max> 5.

在這種情況下,只有children[0]children[2]將匹配。然後如何指定查詢以僅返回: [ { "name": "A", "target": { "min": 2, "max": 10 } }, { "name": "C", "target": { "min": 4, "max": 7 } } ]

如何構造相關查詢。注:我更喜歡服務器端JavaScript或Node.js實現。

回答

2

對於Node.js的,看看queryBuilder.extract或搜索響應變換來看看如果其中的滿足您的需求。這兩個主題在這裏討論:http://docs.marklogic.com/guide/node-dev/search#id_24160

在SJS,所述jsearch映射器和減速機鉤提供類似的功能。有關「使用映射和縮減轉換結果」,請參見以下主題:http://docs.marklogic.com/guide/search-dev/javascript#id_49222

+0

謝謝@kcoleman。我正在尋找地圖/縮小 - 這可能是我現在最好的。 我必須說,這感覺效率相當低。我可以指定類似'cts.pathRangeQuery(「children [*] .target.min」,「<」,5)',並將其用作jsearch查詢的一部分。然後我必須在map/reduce函數內執行類似的檢查。將是很好,如果我能範圍我的查詢只對一定水平(如http://docs.marklogic.com/guide/search-dev/structured-query#id_87231)返回結果 – Kholofelo

+0

有趣的是我可以用'。 map {{snippet:true})'來準確地找到文檔中匹配發生的位置,然後再次運行其他查詢來獲取匹配文檔的這些部分。 – Kholofelo

+0

我對你認爲你可以用結構化查詢做什麼感到困惑,你不能用這些其他接口來做。結構化查詢在cts:query之上完全沒有,只是語法糖。所有搜索界面的目標是查找與您的查詢匹配的文檔,並且我們爲您提供一些鉤子來根據需要轉換匹配項,以及一些默認選項,如snippeting。 – kcoleman

0

試試這個

var a = { 
    "name": "aName", 
    "children": [{ 
     "name": "A", 
     "target": { 
      "min": 2, 
      "max": 10 
     } 
    },{ 
     "name": "B", 
     "target": { 
      "min": 22, 
      "max": 32 
     } 
    },{ 
     "name": "C", 
     "target": { 
      "min": 4, 
      "max": 7 
     } 
    }] 
}; 

var b = []; 

for(var i of a.children){ 
if(i.target.min < 5 && i.target.max > 5){ 
b.push(i); 
} 

} 

console.log(b); 
+0

這是純JavaScript,這是適合於小陣列。我問的問題是如何通過Marklogic來實現,我可能會有成千上萬的JSON文檔。我猜應該有一種類型的查詢可以實現這一點。無論如何,謝謝你的回答。 – Kholofelo

2

在MarkLogic 9,你可以使用TDE對項目與最小值和最大值每個子行和使用光學元件的查詢與對比。

眼下,視神經不可用於Node.js的,但是這計劃。

在MarkLogic 8中,最好的辦法是給每個子模型作爲一個單獨的文檔並創建在最小值和最大值的範圍內的索引。

希望幫助,

+0

謝謝是的,它有幫助。我正在使用marklogic 9。但在目前看來,最好的辦法是將孩子作爲單獨的文件。否則一切都變得非常複雜。 謝謝 – Kholofelo

相關問題