簡體   English   中英

索引中的 arangodb 查詢值

[英]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[*] 上建立了一個索引,其中包含所有學校。 有什么方法可以直接查詢鍵(學校名稱)的索引,而不必在每次需要運行查詢時都觸摸集合中的每條記錄?

有兩件事需要考慮:

  1. FILTER school != null語句需要一個非稀疏散列索引(稀疏索引忽略null值)
  2. 使用LOWER(school)LIKE始終觸及每個文檔 - 沒有索引會有所幫助(它必須訪問文檔以獲取值以使其成為小寫等)

請記住,大多數索引以兩種方式之一工作(“全文”是異常值):

  1. 完全匹配(“哈希”)
  2. 數值gt / lt評估(“skiplist”)

要完成您的任務,您需要在可以完全匹配(區分大小寫)的字符串屬性上創建索引。 如果您不能可靠地匹配屬性值和搜索字符串之間的大小寫,那么我建議要么轉換文檔中的值,要么創建該屬性的小寫副本並對其進行索引。

以下是有關索引類型的 ArangoDB文檔 手冊有一節介紹了索引基礎知識和用法,但我更喜歡 HTTP 文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM