有沒有人知道ArangoDB是否支持分面搜索,以及性能如何與支持它的其他產品(例如Solr,MarkLogic)或沒有的產品(例如Mongo)相比?ArangoDB是否有多面搜索?
在搜索站點,閱讀文檔和搜索Google小組後,我沒有看到它在任何地方討論過。
感謝
有沒有人知道ArangoDB是否支持分面搜索,以及性能如何與支持它的其他產品(例如Solr,MarkLogic)或沒有的產品(例如Mongo)相比?ArangoDB是否有多面搜索?
在搜索站點,閱讀文檔和搜索Google小組後,我沒有看到它在任何地方討論過。
感謝
ArangoDB有一個查詢語言,它支持組由類的查詢。這使您可以實施分面搜索。爲了確定我們對於多面搜索有相同的理解,請讓我解釋一下,我認爲它的意思。你有 - 例如 - 產品清單。每種產品都有一些屬性(例如名稱,型號)和一些類別(例如製造商)。然後我可以搜索一個包含單詞的名稱或名稱。這將列出所有產品以及顯示有多少產品屬於哪個類別。這是你的意思嗎?
所以對於例子:假設你有哪些有三個屬性(名稱,ATTRIBUTE1,attribute2)和兩個類別(類別1,類別2)文件:
> for (i = 0; i < 10000; i++) db.products.save({category1: i % 5, category2: i % 7, attribute1: i % 13, attribute2: i % 17, name: "Lore Ipsum " + i, productId: i})
這樣一個典型的文檔是:
> db.products.any()
{
"_id" : "products/8788564659",
"_rev" : "8788564659",
"_key" : "8788564659",
"productId" : 9291,
"category1" : 1,
"category2" : 2,
"attribute1" : 9,
"attribute2" : 9,
"name" : "Lore Ipsum 9291"
}
如果你想搜索已2和3(含)之間的ATTRIBUTE1的所有文件,可以使用
> db._query("FOR p IN products FILTER p.attribute1 >= 2 && p.attribute1 <= 3 SORT p.name LIMIT 3 RETURN p").toArray();
[
{
"_id" : "products/7159077555",
"_rev" : "7159077555",
"_key" : "7159077555",
"productId" : 1003,
"category1" : 3,
"category2" : 2,
"attribute1" : 2,
"attribute2" : 0,
"name" : "Lore Ipsum 1003"
},
{
"_id" : "products/7159274163",
"_rev" : "7159274163",
"_key" : "7159274163",
"productId" : 1004,
"category1" : 4,
"category2" : 3,
"attribute1" : 3,
"attribute2" : 1,
"name" : "Lore Ipsum 1004"
},
{
"_id" : "products/7161633459",
"_rev" : "7161633459",
"_key" : "7161633459",
"productId" : 1016,
"category1" : 1,
"category2" : 1,
"attribute1" : 2,
"attribute2" : 13,
"name" : "Lore Ipsum 1016"
}
]
,或者如果你只對產品有興趣的標識
> db._query("FOR p IN products FILTER p.attribute1 >= 2 && p.attribute1 <= 3 SORT p.name LIMIT 3 RETURN p.productId").toArray();
[
1003,
1004,
1016
]
我們拿到方面說的組別
> db._query("LET l = (FOR p IN products FILTER p.attribute1 >= 2 && p.attribute1 <= 3 SORT p.name RETURN p) return [ slice(l,@skip,@count), (FOR p in l collect c1 = p.category1 INTO g return { category1: c1, count: length(g[*].p)}) ]", { skip: 0, count: 3 }).toArray()
[
[
[
{
"_id" : "products/7159077555",
"_rev" : "7159077555",
"_key" : "7159077555",
"productId" : 1003,
"category1" : 3,
"category2" : 2,
"attribute1" : 2,
"attribute2" : 0,
"name" : "Lore Ipsum 1003"
},
{
"_id" : "products/7159274163",
"_rev" : "7159274163",
"_key" : "7159274163",
"productId" : 1004,
"category1" : 4,
"category2" : 3,
"attribute1" : 3,
"attribute2" : 1,
"name" : "Lore Ipsum 1004"
},
{
"_id" : "products/7161633459",
"_rev" : "7161633459",
"_key" : "7161633459",
"productId" : 1016,
"category1" : 1,
"category2" : 1,
"attribute1" : 2,
"attribute2" : 13,
"name" : "Lore Ipsum 1016"
}
],
[
{
"category1" : 0,
"count" : 307
},
{
"category1" : 1,
"count" : 308
},
{
"category1" : 2,
"count" : 308
},
{
"category1" : 3,
"count" : 308
},
{
"category1" : 4,
"count" : 308
}
]
]
]
向下鑽取到類別1和使用方面的組別2:
> db._query("LET l = (FOR p IN products FILTER p.attribute1 >= 2 && p.attribute1 <= 3 && p.category1 == 1 SORT p.name RETURN p) return [ slice(l,@skip,@count), (FOR p in l collect c2 = p.category2 INTO g return { category2: c2, count: length(g[*].p)}) ]", { skip: 0, count: 3 }).toArray()
[
[
[
{
"_id" : "products/7161633459",
"_rev" : "7161633459",
"_key" : "7161633459",
"productId" : 1016,
"category1" : 1,
"category2" : 1,
"attribute1" : 2,
"attribute2" : 13,
"name" : "Lore Ipsum 1016"
},
{
"_id" : "products/7169497779",
"_rev" : "7169497779",
"_key" : "7169497779",
"productId" : 1056,
"category1" : 1,
"category2" : 6,
"attribute1" : 3,
"attribute2" : 2,
"name" : "Lore Ipsum 1056"
},
{
"_id" : "products/6982720179",
"_rev" : "6982720179",
"_key" : "6982720179",
"productId" : 106,
"category1" : 1,
"category2" : 1,
"attribute1" : 2,
"attribute2" : 4,
"name" : "Lore Ipsum 106"
}
],
[
{
"category2" : 0,
"count" : 44
},
{
"category2" : 1,
"count" : 44
},
{
"category2" : 2,
"count" : 44
},
{
"category2" : 3,
"count" : 44
},
{
"category2" : 4,
"count" : 44
},
{
"category2" : 5,
"count" : 44
},
{
"category2" : 6,
"count" : 44
}
]
]
]
爲了使該搜索字符串更加用戶友好,有必要在Javascript中編寫一些小的幫助函數。我認爲支持組https://groups.google.com/forum/#!forum/arangodb將是他們討論您的要求的正確地方。
感謝您的詳細解答。 – user2029783