在我的Neo4j圖形,我只需要一個特定類型的節點的用戶可搜索。該節點具有標籤「同義詞」並且只有一個屬性「別名」。如何標記從Neo4j複製到彈性搜索的數據?
我使用它複製圖表彈性搜索GraphAware Neo4j Elasticsearch Integration (Neo4j Module),即它爲我創造一個彈性的搜索索引。然後我可以讓查詢,如
CALL ga.es.queryNode('{\"query\":{\"match\":{\"alias\":\"mySynonym\"}}}')
YIELD node RETURN node
這工作,但我想用我的同義詞,即一個n gram tokenizer的「別名」屬性。目前,只有上面的查詢返回的結果,一旦我的全名類型,即「mySynonym」,而不是當我只輸入「MYS」。
在模塊文檔我找不到任何有關斷詞什麼。於是,我就更新由Neo4j的模塊是這樣產生的彈性搜索索引:
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"
]
}
}
}
}
然後:
PUT neo4j-index-node/_mapping/Synonym?update_all_types
{
"properties": {
"alias": {
"type": "text",
"analyzer": "my_analyser",
"search_analyzer": "my_analyser"
}
}
}
第二個命令給我一個錯誤:
Mapper for [alias] conflicts with existing mapping in other types:\n[mapper [alias] has different [analyzer]
我閱讀某處後,無法在創建索引後更改映射。但是我的索引是由Neo4j模塊創建的,我不知道如何事先指定標記器。
任何想法?謝謝!
的GraphAware插件實際上並沒有創建映射。當第一次插入文檔時沒有指定使用動態映射的映射時,它是默認的ES行爲。作爲回答,您的角色是事先創建映射,而不是爲了爲您完成neo4j數據庫,這可能會導致非常意外的行爲。 –