2017-04-06 55 views
0

的情況下,我有以下SDN 4節點實體:的Neo4j /彈簧數據的Neo4j 4索引和字符

這裏面實體我已經添加name屬性並宣佈索引。

現在我要按產品名稱實現不區分大小寫的搜索。

我已經創建了一個SDN 4庫方法:

@Query("MATCH (p:Product) WHERE LOWER(d.name) = LOWER({name}) RETURN p") 
Product findByName(@Param("name") String name); 

爲了尋找一個產品我用下面的暗號:LOWER(d.name) = LOWER({name})

我想了指數不有效在這種情況下,因爲我的工作小寫字符串。

Neo4j/SDN 4中的索引在這裏工作的正確方法是什麼?

回答

2

如果您不需要在原始案例中存儲名稱,那麼在將名稱存儲在數據庫中之前,將名稱轉換爲小寫。

如果您確實需要原始案例中的名稱,那麼您可以添加一個存儲小寫名稱的額外屬性(比如「lower_name」)。您可以索引該屬性並將其用於索引比較。

第三個選擇是使用legacy indexing,使用起來要複雜得多,不再受青睞。但是,它支持不區分大小寫的索引(請參閱this page上的第二個示例)。

+0

感謝您的回答。我只是想知道,或者它是用Neo4j和SDN4實現它的唯一方法。例如在PostgreSQL中,我們可以創建'CREATE INDEX lower_case_name ON用戶((lower(name))); '然後使用它。我們在Neo4j/SDN有類似的東西嗎? – alexanoid

+0

該類型的功能不存在。但是,請參閱我的第三個選項的更新答案。 – cybersam