私のNeo4jグラフでは、特定の種類のノードだけをユーザーが検索できるようにする必要があります。このノードはラベル「シノニム」と1つのプロパティ「エイリアス」のみを持ちます。Neo4jからElastic検索に複製されたデータをどのようにトークン化しますか?
グラフを弾性検索に複製するGraphAware Neo4j Elasticsearch Integration (Neo4j Module)を使用しています。つまり、弾性検索インデックスを作成します。私は、この作品
CALL ga.es.queryNode('{\"query\":{\"match\":{\"alias\":\"mySynonym\"}}}')
YIELD node RETURN node
ようなクエリを作ることができますが、私は、すなわち「エイリアス」の性質のために、私の同義語のためn gram tokenizerを使用したいと思います。現在、上記のクエリはフルネーム(「mySynonym」)を入力すると結果を返しますが、「myS」と入力すると結果を返しません。
モジュールのマニュアルでは、トークナイザについて何も見つかりませんでした。その後、
PUT neo4j-index-node/_settings
{
"analysis": {
"analyzer": {
"my_analyser": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation"
]
}
}
}
}
と::だから私はこのようなのNeo4jモジュールによって作成された弾性検索インデックスを更新しようとした
PUT neo4j-index-node/_mapping/Synonym?update_all_types
{
"properties": {
"alias": {
"type": "text",
"analyzer": "my_analyser",
"search_analyzer": "my_analyser"
}
}
}
を2番目のコマンドは私にエラーを与える:
Mapper for [alias] conflicts with existing mapping in other types:\n[mapper [alias] has different [analyzer]
私は索引が作成された後にマッピングを変更することができないことをどこかに読んでください。しかし、私のインデックスはNeo4jモジュールによって作成されており、私は事前にトークナイザを指定する方法を知らない。
アイデア?ありがとう!
GraphAwareプラグインは実際にマッピングを作成しません。ドキュメントの最初の挿入時に動的マッピングを使用するマッピングが指定されていない場合のデフォルトのES動作です。答えとして、あらかじめマッピングを作成しておき、neo4jデータベースでは作成しないようにすることがあなたの役割です。これは非常に予期しない動作につながります。 –