2017-04-06 4 views
0

の場合は、私は次のSDN 4ノードエンティティがあります。このエンティティの内部のNeo4j /春データのNeo4j 4インデックスと文字

を私はnameプロパティを追加し、インデックスを宣言しました。

今は、製品名で大文字と小文字を区別しない検索を実装します。

私はSDN 4リポジトリ方法作成した

:なぜなら私私は、インデックスが効果的にこのケースでは動作しませんと思いますLOWER(d.name) = LOWER({name})

:サイファーを以下の私が使用して製品を検索するために

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

を文字列を小文字にします。

ここでインデックスを作成するためのNeo4j/SDN 4の適切な方法は何ですか?

答えて

2

元のケースに名前を格納する必要がない場合は、名前を小文字に変換してからDBに格納します。

元のケースに名前が必要な場合は、小文字の名前を格納する追加のプロパティ(たとえば「lower_name」)を追加できます。そのプロパティをインデックス化して、インデックス付きの比較に使用できます。

legacy indexingを使用するのが第3の選択肢です。使用するのがはるかに複雑で、もはや優先されません。ただし、大文字と小文字を区別しないインデックス作成をサポートしています(this pageの2番目の例を参照)。

+0

あなたの答えをありがとう。私は疑問に思ったり、Neo4jとSDN 4でそれを実現する唯一の方法です。たとえばPostgreSQLでは、CREATE INDEX lower_case_name on users((lower(name)))を作成できます。 'それを使ってください。 Neo4j/SDNに類似したものはありますか? – alexanoid

+0

その種類の機能は存在しません。しかし、私の更新された答えを第3のオプションで見てください。 – cybersam

関連する問題