繁体   English   中英

我如何在 windows 上使用 neo4j 和 php?

[英]how can i use neo4j with php on windows?

我知道这个话题是重复的,但我做不到……我在我的 cmd 中运行这个

C:\\Users\\Asus> composer require graphaware/neo4j-php-client

我使用这个代码:

   <?php
/**
 * To install Neo4j-PHP-Client, we use Composer
 *
 * $ curl -sS https://getcomposer.org/installer | php
 * $ php composer.phar require graphaware/neo4j-php-client
 *
 */

require 'C:\Users\Asus\vendor\autoload.php';

use GraphAware\Neo4j\Client\ClientBuilder;

// change to your hostname, port, username, password
$neo4j_url = "neo4j@bolt://localhost:11004";

// setup connection
$client = ClientBuilder::create()
    ->addConnection('default', $neo4j_url)
    ->build();

// setup data
$insert_query = <<<EOQ
UNWIND {pairs} as pair
MERGE (p1:Person {name:pair[0]})
MERGE (p2:Person {name:pair[1]})
MERGE (p1)-[:KNOWS]-(p2);
EOQ;

// friend data to insert
$data = [["Jim","Mike"],["Jim","Billy"],["Anna","Jim"],
    ["Anna","Mike"],["Sally","Anna"],["Joe","Sally"],
    ["Joe","Bob"],["Bob","Sally"]];

// insert data
$client->run($insert_query, ["pairs" => $data]);


// friend of friend: query
$foaf_query = <<<EOQ
MATCH (person:Person)-[:KNOWS]-(friend)-[:KNOWS]-(foaf)
WHERE person.name = {name}
  AND NOT (person)-[:KNOWS]-(foaf)
RETURN foaf.name AS name
EOQ;

// friend of friend: build and execute query
$params = ['name' => 'Joe'];
$result = $client->run($foaf_query, $params);

foreach ($result->records() as $record) {
    echo $record->get('name') . PHP_EOL;
}


// common friends: query
$common_friends_query = <<<EOQ
MATCH (user:Person)-[:KNOWS]-(friend)-[:KNOWS]-(foaf:Person)
WHERE user.name = {user} AND foaf.name = {foaf}
RETURN friend.name AS friend
EOQ;

// common friends: build and execute query
$params = ['user' => 'Joe', 'foaf' => 'Sally'];
$result = $client->run($common_friends_query, $params);

foreach ($result->records() as $record) {
    echo $record->get('friend') . PHP_EOL;
}


// connecting paths: query
$connecting_paths_query = <<<EOQ
MATCH path = shortestPath((p1:Person)-[:KNOWS*..6]-(p2:Person))
WHERE p1.name = {name1} AND p2.name = {name2}
RETURN [n IN nodes(path) | n.name] as names
EOQ;

// connecting paths: build and execute query
$params = ['name1' => 'Joe', 'name2' => 'Billy'];
$result = $client->run($connecting_paths_query, $params);

foreach ($result->records() as $record) {
    print_r($record->get('names'));
}

我有这个错误注意:未定义索引:C:\\Users\\Asus\\vendor\\graphaware\\neo4j-php-client\\src\\Connection\\Connection.php 中的方案在第 77 行

注意:未定义索引:host in C:\\Users\\Asus\\vendor\\graphaware\\neo4j-php-client\\src\\Connection\\Connection.php on line 77

警告:stream_socket_client():无法连接到 tcp://://:7687:7687(请求的地址在其上下文中无效。)在 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-bolt\\src \\IO\\StreamSocket.php 第 167 行

致命错误:未捕获的异常 'GraphAware\\Bolt\\Exception\\IOException' 带有消息 'Error to connect to the server(10049):“请求的地址在其上下文中无效。”在 C:\\Users\\Asus\\vendor\\ graphaware\\neo4j-bolt\\src\\IO\\StreamSocket.php:170 堆栈跟踪:#0 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-bolt\\src\\IO\\StreamSocket.php(189): GraphAware\\Bolt\\ IO\\StreamSocket->connect() #1 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-bolt\\src\\Driver.php(114): GraphAware\\Bolt\\IO\\StreamSocket->reconnect() #2 C: \\Users\\Asus\\vendor\\graphaware\\neo4j-bolt\\src\\Driver.php(98): GraphAware\\Bolt\\Driver->handshake() #3 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-php-client \\src\\Connection\\Connection.php(164): GraphAware\\Bolt\\Driver->session() #4 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-php-client\\src\\Connection\\Connection.php(115) ): GraphAware\\Neo4j\\Client\\Connection\\Connection->checkSession() #5 C:\\Users\\Asus\\vendor\\graphaware\\neo4j-php-client\\src\\Client.php(45): GraphAware\\Neo4j\\Client\\连接\\连接->运行('UNW IND {pairs} ...', Array, NULL) #6 C in C:\\Users\\Asus\\vendor\\graphaware\\neo4j-bolt\\src\\IO\\StreamSocket.php on line 170

堆栈跟踪似乎无法解析连接 URL,因为它似乎没有提出任何方案主机

在我看来,它可以追溯到您发布的代码中的这一行:

$client->run($insert_query, ["pairs" => $data]);

我认为最终使用在这一行定义的 URL:

$neo4j_url = "neo4j@bolt://localhost:11004";

但这种格式在我看来是错误的; 当用户名和密码作为 URL 的一部分提供时,格式为:

 foo://example.com:8042/over/there?name=ferret#nose
 \_/   \______________/\_________/ \_________/ \__/
  |           |            |            |        |
scheme     authority       path        query   fragment

authority部分是:

authority   = [ userinfo "@" ] host [ ":" port ]

所以我认为你想要的 URL 是:

$neo4j_url = "http://neo4j:bolt@localhost:11004/";      -or-
$neo4j_url = "bolt://neo4j:password@localhost:11004/";  <-- from doc linked in comment

其中一些是猜测,但我希望这可以解决它,或者让您走上正确的道路来解决它。

URI 格式参考: https : //www.rfc-editor.org/rfc/rfc3986

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM