[英]arangodb query values in an index
我有一組棒球運動員,其結構如下:
{
"name": "john doe",
"education": [
"Community College",
"University"
]
}
如果我想獲得教育數組中所有學校的列表,我可以執行以下操作:
FOR school IN unique((
FOR player IN players
COLLECT schools = player.education
RETURN schools
)[**])
FILTER school != null
FILTER LOWER(school) LIKE CONCAT('%', @name, '%')
LIMIT 10
RETURN school
但是為了做到這一點,它必須接觸集合中的每個文檔。 我在 player.education[*] 上建立了一個索引,其中包含所有學校。 有什么方法可以直接查詢鍵(學校名稱)的索引,而不必在每次需要運行查詢時都觸摸集合中的每條記錄?
有兩件事需要考慮:
FILTER school != null
語句需要一個非稀疏散列索引(稀疏索引忽略null
值)LOWER(school)
和LIKE
將始終觸及每個文檔 - 沒有索引會有所幫助(它必須訪問文檔以獲取值以使其成為小寫等)請記住,大多數索引以兩種方式之一工作(“全文”是異常值):
gt
/ lt
評估(“skiplist”)要完成您的任務,您需要在可以完全匹配(區分大小寫)的字符串屬性上創建索引。 如果您不能可靠地匹配屬性值和搜索字符串之間的大小寫,那么我建議要么轉換文檔中的值,要么創建該屬性的小寫副本並對其進行索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.