2017-02-10 75 views
0

在我的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模塊創建的,我不知道如何事先指定標記器。

任何想法?謝謝!

+0

的GraphAware插件實際上並沒有創建映射。當第一次插入文檔時沒有指定使用動態映射的映射時,它是默認的ES行爲。作爲回答,您的角色是事先創建映射,而不是爲了爲您完成neo4j數據庫,這可能會導致非常意外的行爲。 –

回答

1

這是真的,你不能修改現有的映射。刪除所有現有的索引。嘗試首先爲Neo4j索引創建ES模板(在導入Neo4j數據之前)。

模板可以這樣創建:

PUT _template/template_1 
{ 
    "template": "te*", 
    "settings": { 
    "number_of_shards": 1 
    }, 
    "mappings": { 
    "type1": { 
     "_source": { 
     "enabled": false 
     }, 
     "properties": { 
     "host_name": { 
      "type": "keyword" 
     }, 
     "created_at": { 
      "type": "date", 
      "format": "EEE MMM dd HH:mm:ss Z YYYY" 
     } 
     } 
    } 
    } 
} 

..在模板設置你的索引模式。然後裏面設置部分添加自定義的分析是這樣的:

PUT my_index 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_custom_analyzer": { 
      "type":  "custom", 
      "tokenizer": "standard", 
      "char_filter": [ 
      "html_strip" 
      ], 
      "filter": [ 
      "lowercase", 
      "asciifolding" 
      ] 
     } 
     } 
    } 
    } 
} 

..然後開始索引數據。我給你2個例如查詢,但你應該再合併成一個

+0

謝謝,它的工作! – grasgeo