2016-02-29 110 views
2

之間最好的解決辦法,我有幾個JSON這樣的:MarkLogic - 收集和索引

[{ 
    "type": "car", 
    "field1": "test" 
}, { 
    "type": "bike", 
    "field1": "test" 
}] 

我將它們存儲在MarkLogic 8.4,我想對他們進行一些搜索查詢根據類型來檢索文件(如:查找所有類型爲「car」的文檔)。

我有兩個可能的解決方案:

  • 設置Marklogic收藏到每個文檔。示例:在示例文檔中放置「car」和「bike」集合。在我的搜索查詢中,我可以添加收藏限制。
  • 放在每個JSON的「類型」字段的索引

一個方法比另一個在性能和/或最佳實踐學期更好?

謝謝, 羅曼。

回答

7

嘗試cts.jsonPropertyValueQuery:

cts.search(cts.jsonPropertyValueQuery("type", "car")) 

通用指數應該有你需要的信息。

編輯擴展我的回答: 您提到的兩種解決方案都需要存儲附加信息。在所描述的情況下,Universal Index已經擁有了您需要的信息,因此成爲首選解決方案。如果jsonPropertyValueQuery變得模糊,這種方法將不再是我的首選;也就是說,如果每個文檔有多個type屬性。在這種情況下,查詢將與任何type屬性相匹配。

如果是這種情況,則在type屬性上放置JSON屬性範圍索引將無濟於事,因爲範圍索引仍將包含type屬性的所有實例。

要在文檔中處理多種類型的你將有兩個選擇:

  1. ,使用集合
  2. 使用的路徑範圍內指數

在這兩個,我喜歡的第一個。它很靈活 - 即使您的數據庫中具有不同結構的文檔,也可以使用它。這樣,它可能會「爲您的項目提供未來證明」。權衡是你的代碼在插入時需要管理你的文檔集合。儘管這很簡單。

在性能方面,這兩種方法中的任何一種都可以很好地處理查詢,但選項二在索引過程中會做更多的工作。 MarkLogic需要檢查文檔中是否存在配置的路徑,如果是,則相應地更新索引。這是一個小小的差異,但有可能加起來。

+0

謝謝!我的問題是更多的是哪個是最好的解決方案比如何實施解決方案:) –

+0

完美的答案!非常感謝Dave! :) –