如何从Elasticsearch DevTools向Neo4j服务器发送查询请求
从Elasticsearch DevTools调用Neo4j的正确实现方案
首先明确核心逻辑:APOC是Neo4j专属插件,其提供的函数仅能在Neo4j的Cypher执行环境中调用,无法直接在Elasticsearch的DSL中运行,这是你之前测试失败的根本原因。
前置环境修正(Docker Compose场景)
- 两个服务在同一Docker Compose网络下时,互访不要使用
localhost作为地址,要使用Compose配置文件中定义的服务名作为访问域名,比如Neo4j服务名为neo4j则访问地址为neo4j:7687,Elasticsearch服务名为elasticsearch则访问地址为elasticsearch:9200 - 确保Neo4j的7474(HTTP API端口)、7687(Bolt端口)和Elasticsearch的9200端口已正确配置端口映射或服务暴露
方案1:从Neo4j侧同步数据到Elasticsearch(适配可视化需求,推荐)
你最终需要用Elasticsearch做可视化,更合理的流程是把Neo4j的业务数据同步到Elasticsearch中,再基于ES的索引做可视化,该方案可直接使用你已安装的APOC插件实现。
测试Neo4j到Elasticsearch的连通性
在Neo4j浏览器中执行以下Cypher语句验证连通性:
CALL apoc.es.get("elasticsearch:9200","_cat/indices")
批量同步Neo4j数据到ES
MATCH (n) CALL apoc.es.post( "elasticsearch:9200", "neo4j_data/_doc", // neo4j_data为ES侧的索引名,可自定义 null, { node_id: id(n), node_labels: labels(n), node_properties: properties(n) } ) YIELD value RETURN count(value)
方案2:在Elasticsearch DevTools中直接调用Neo4j接口
如果需要直接在ES DevTools中请求Neo4j的数据,可调用Neo4j原生的HTTP API,正确的请求格式如下:
POST http://neo4j:fall2021@localhost:7474/db/neo4j/tx/commit Content-Type: application/json { "statements": [ { "statement": "MATCH (n) RETURN n LIMIT 5" } ] }
注意:如果是Docker Compose内部服务互访,将请求地址中的
localhost替换为Neo4j的服务名即可。
内容的提问来源于stack exchange,提问作者Luleo_Primoc
相关产品推荐
相关产品推荐

