Elasticsearch PHP致命错误:未捕获类型错误:参数1
我对Elasticsearch和PHP都是新手。我一直在试图找出我收到的代码的问题。我正在使用WAMP 3.1和PHP7.1以及Elasticsearch 6.2 当我转到本地主机时,我收到以下错误:Elasticsearch PHP致命错误:未捕获类型错误:参数1,php,
elasticsearch,Php,
elasticsearch,我对Elasticsearch和PHP都是新手。我一直在试图找出我收到的代码的问题。我正在使用WAMP 3.1和PHP7.1以及Elasticsearch 6.2 当我转到本地主机时,我收到以下错误: Fatal error: Uncaught TypeError: Argument 1 passed to Elasticsearch\Client::__construct() must be an instance of Elasticsearch\Transport, array given
Fatal error: Uncaught TypeError: Argument 1 passed to Elasticsearch\Client::__construct() must be an instance of Elasticsearch\Transport, array given, called in C:\wamp64\www\search\init.php on line 5 and defined in C:\wamp64\www\search\vendor\elasticsearch\elasticsearch\src\Elasticsearch\Client.php:98 Stack trace: #0 C:\wamp64\www\search\init.php(5): Elasticsearch\Client->__construct(Array) #1 C:\wamp64\www\search\index.php(2): require_once('C:\\wamp64\\www\\s...') #2 {main} thrown in C:\wamp64\www\search\vendor\elasticsearch\elasticsearch\src\Elasticsearch\Client.php on line 98
我可以看出我的Init.php可能有问题,但我一直在使用未经修改的Init.php,因此我不确定这是否是问题所在
<?php
require_once 'vendor/autoload.php';
$es = new Elasticsearch\Client([
'hosts' => ['127.0.0.1:9200']
]);
Here is also the index.php.
<?php
require_once 'init.php';
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = Elasticsearch\ClientBuilder::create()->build();
if (isset($_GET['q'])) {
$q = $_GET['q'];
$query = $es->search([
'body' => [
'query' => [
'bool' => [
'should' => [
'match' => ['name' => $q],
'match' => ['content' => $q]
]
]
]
]
]);
}
echo '<pre>', print_r($query), '</pre>';
if($query['hits']['total'] >=1 ) {
$results = $query['hits']['hits'];
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>search | ES</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<form action="index.php" method="get" autocomplete="off">
<label>
Search
<input type="text" name="q">
</label>
<input type="submit" value="Search">
</form>
<?php
if(isset($results)) {
foreach($results as $r) {
?>
<div class="result">
<a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['title'];?></a>
<div class="result-keywords"><?php implode(', ', $r['_source']['keywords']);?></div>
</div>
<?php
}
}
?>
</body>
</html>
如果有必要解决这个问题,我很乐意提供任何其他信息。您根本不需要init,而且您在那里使用的客户机类是错误的。只要做:
<?php
require_once 'vendor/autoload.php';
$es = new Elasticsearch\Client([
'hosts' => ['127.0.0.1:9200']
]);
Here is also the index.php.
<?php
require_once 'init.php';
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = Elasticsearch\ClientBuilder::create()->build();
if (isset($_GET['q'])) {
$q = $_GET['q'];
$query = $es->search([
'body' => [
'query' => [
'bool' => [
'should' => [
'match' => ['name' => $q],
'match' => ['content' => $q]
]
]
]
]
]);
}
echo '<pre>', print_r($query), '</pre>';
if($query['hits']['total'] >=1 ) {
$results = $query['hits']['hits'];
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>search | ES</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<form action="index.php" method="get" autocomplete="off">
<label>
Search
<input type="text" name="q">
</label>
<input type="submit" value="Search">
</form>
<?php
if(isset($results)) {
foreach($results as $r) {
?>
<div class="result">
<a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['title'];?></a>
<div class="result-keywords"><?php implode(', ', $r['_source']['keywords']);?></div>
</div>
<?php
}
}
?>
</body>
</html>