Neo 4 j全文インデックスの使用

6105 ワード

一、紹介


このブログはNeo 4 j 3.5バージョンについて、オリジナルの内容は公式ドキュメントを参照してください.https://neo4j.com/docs/cypher-manual/3.5/schema/index/
Neo 4 jの全文インデックスはLuceneを採用し,neo 4 jにおけるstringタイプの属性に全文インデックスを確立できる.
  • は、nodeとrelationshipの属性を同時にインデックス化することができる.一方、neo 4 jに埋め込まれたインデックスは、nodeの属性に対してのみインデックスを確立することができる.
  • 文字列がどのように分割され、インデックス化されるかは、luceneに構成されたanalyzerに依存します.luceneでは提供されていないカスタムAnalyzerをサポートします.
  • はluceneクエリ文でクエリを行うことができる.
  • は類似度scoreを返すことができる.
  • は、ノードと関係の追加、除去、修正に伴って自動的に更新することができる.
  • 自動的に一致性を検査し、一致しない問題があれば自動的に再構築する.
  • 単一インデックスでは、任意の数のドキュメントをサポートすることができる.
  • 作成、削除、更新はすべてトランザクションであり、クラスタ内で自動的にコピーを行うことができる.
  • はcypher文からアクセス可能である.
  • は、最終的な一貫性を満たすように構成することができる.すなわち、インデックス更新はコミットパスから削除され、バックグラウンドスレッドに移行する.この機能により、パフォーマンスが要求されるシーンでは、主な書き込みボトルネックを解消できます.

  • Neo 4 jに埋め込まれたインデックスと比較して、Luceneインデックスを使用すると、次のような利点があります.
  • neo 4 jの埋め込みインデックスは、STARTS WITH、ENDS WITH、完全に等しい3つの条件にのみ機能するbツリーを採用している.一方、luceneが確立した全文インデックスは、任意のセグメントの文字列をクエリーすることができます.
  • luceneインデックスは、複数のlabelに対して確立することができる.
  • luceneインデックスは、1から複数の関係を確立することができる.
  • は、複数の属性に同時に適用することができる.インデックスを埋め込んだComponentIndexとは異なります.Composite Indexはlabelを満たすとともにすべての属性を持つエンティティにのみ作用するが、全文インデックスは少なくとも1つのlabel、関係タイプ、属性を満たすノードまたは関係に作用する.

  • 二、使用


    1.一般的な操作はneo 4 jの内生procedureを用いて全文インデックスを管理する.最も一般的なprocedureは以下に示す.
    機能
    プロセス
    説明
    全文ノードインデックスの作成
    db.index.fulltext.createNodeIndex
    パラメータには、1.グローバル一意のインデックス名(タイプはstring).2.labels(タイプはstring list);3.properties(タイプはstring list);4.config(オプションで、keyとvalueがstringタイプのmap)です.configでは、インデックスを作成するAnalyzer(analyzerプロパティ)を指定したり、最終的なコンシステンシモード(eventually_consistent)を使用するかどうかを指定したりできます.
    全文関係インデックスの作成
    db.index.fulltext.createRelationshipIndex
    パラメータには、1.グローバル一意のインデックス名(タイプはstring).2.relationship types(タイプはstring list);3.properties(タイプはstring list);4.config(オプションで、keyとvalueがstringタイプのmap)です.configでは、インデックスを作成するAnalyzer(analyzerプロパティ)を指定したり、最終的なコンシステンシモード(eventually_consistent)を使用するかどうかを指定したりできます.
    全文ノードインデックスの使用
    db.index.fulltext.queryNodes
    パラメータ:1.インデックス名2.luceneクエリ文の戻り:1.一致するノード2.luceneスコアはscore降順で返されます
    全文関係インデックスの使用
    db.index.fulltext.queryRelationships
    パラメータ:1.インデックス名2.luceneクエリ文の戻り:1.一致する関係2.luceneスコアはscore降順で返されます
    索引の削除
    db.index.fulltext.drop
    パラメータ:1.索引名
    最終コンシステンシインデックス
    db.index.fulltext.awaitEventuallyConsistentIndexRefresh
    最終コンシステンシ全文インデックスで、最新のコミットを待つトランザクションが有効になります.
    使用可能なAnalyzerのリスト
    db.index.fulltext.listAvailableAnalyzers
    全文インデックスで使用可能なすべてのAnalyzerをリストします.luceneにはすでに多くの言語のanalyzerが内蔵されている.
    2.全文インデックスの作成と構成たとえば、LabelがMovieとBookのノードにインデックスを作成する場合、インデックスのフィールドにはtitleとdescriptionが含まれます.次のcypher文を使用します.
    CALL db.index.fulltext.createNodeIndex("titlesAndDescriptions",["Movie", "Book"],["title", "description"])
    

    上記のインデックスを使用して、タイトルまたは説明に「matrix」が含まれているノードを検索するには、次のcypher文を呼び出します.
    CALL db.index.fulltext.queryNodes("titlesAndDescriptions", "matrix") YIELD node, score
    RETURN node.title, node.description, score
    

    リレーショナルインデックスの作成、オプションパラメータconfigの使用.
    CALL db.index.fulltext.createRelationshipIndex("taggedByRelationshipIndex",["TAGGED_AS"],["taggedByUser"], { analyzer: "url_or_email", eventually_consistent: "true" })
    

    3.全文索引による照会
    CALL db.index.fulltext.queryNodes("titlesAndDescriptions", "Full Metal Jacket") YIELD node, score
    RETURN node.title, score
    

    文法はLuceneの全文で検索できます.たとえば、完全に一致する必要がある場合は、二重引用符を付けます.
    CALL db.index.fulltext.queryNodes("titlesAndDescriptions", "\"Full Metal Jacket\"") YIELD node, score
    RETURN node.title, score
    

    論理オペレータ(AND ORなど)を使用できます.
    CALL db.index.fulltext.queryNodes("titlesAndDescriptions", 'full AND metal') YIELD node, score
    RETURN node.title, score
    

    指定したプロパティをクエリーすることもできます.
    CALL db.index.fulltext.queryNodes("titlesAndDescriptions", 'description:"surreal adventure"') YIELD node, score
    RETURN node.title, node.description, score
    

    4.全文索引の削除
    CALL db.index.fulltext.drop("taggedByRelationshipIndex")