我在Web主机服务器上安装了PHP脚本。它具有一个搜索栏和一个按钮。在将信息输入搜索栏并单击按钮后,查询将发送到Elasticsearch,该查询应返回结果。
这在使用WAMP的本地服务器设置上运行良好。不过,这里的区别之一是Elasticsearch本身正在另一台服务器(Debian 9)上运行。
脚本(已删除外部IP):
<?php
require_once 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts(['externalIP:9200'])->build();
$es = $client;
echo "<div class='search'>
<form action='index.php' method='get' autocomplete='off' class='search_form'>
<label>
<input type='text' name='q' placeholder='Søk her'>
</label>
<label><input type='submit' value='Søk' name='s'></label>
</form>
</div>";
if (isset($_GET['q'])) {
$q = $_GET['q'];
$query = $es->search([
'index' => 'aksjeregisteret2017',
'size' => 20,
'body' => [
'query' => [
'bool' => [
'must' => [
'multi_match' => [
'query' => $q,
'fields' => ['message', 'Navn Aksjoner', 'Orgnr', 'Selskap',
'Aksjeklasse', 'Navn Aksjoner', 'Fodselar/Orgnr', 'Postnr',
'Antall Aksjer', 'Antall Aksjer Selskap'],
"minimum_should_match" => "50%"
]
]
]
]
]
]);
}
if($query['hits']['total'] >=1 ) {
$results = $query['hits']['hits'];
}
//var_dump($results);
?>
<!doctype html>
<html>
<head>
<title>Søk i Aksjoneregisteret</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<?php if (isset($_GET['q'])) { ?>
<table>
<tr>
<th>Orgnr</th>
<th>Selskap</th>
<th>Aksjeklasse</th>
<th>Navn Aksjoner</th>
<th>Fodselar/Orgnr</th>
<th>Postnr</th>
<th>Poststed</th>
<th>Antall Aksjer</th>
<th>Antall Aksjer Selskap</th>
</tr>
<?php foreach ($results as $r) { ?>
<tr>
<td><?php echo $r['_source']['Orgnr'] ?></td>
<td><?php echo $r['_source']['Selskap'] ?></td>
<td><?php echo $r['_source']['Aksjeklasse'] ?></td>
<td><?php echo $r['_source']['Navn Aksjoner'] ?></td>
<td><?php echo $r['_source']['Fodselar/Orgnr'] ?></td>
<td><?php echo $r['_source']['Postnr'] ?></td>
<td><?php echo $r['_source']['Poststed'] ?></td>
<td><?php echo $r['_source']['Antall Aksjer'] ?></td>
<td><?php echo $r['_source']['Antall Aksjer Selskap'] ?></td>
</tr>
<?php } ?>
</table>
<?php } else { echo "no result"; } ?>
</body>
</html>
问题在于,与其返回带有数据的表,不返回任何内容。加载一段时间后只是空白页。没有错误。
可能错误的一件事是我们如何安装PHP脚本。我们无法在Web主机上使用终端,因此我们使用composer在linux服务器(已安装Elasticsearch的服务器)上创建elasticsearch PHP供应商文件夹,然后将其与脚本一起直接移至Web主机上的文件夹中。这样工作是否可行?是否有任何问题?还有另一种方法吗?
通过使用浏览器中的外部IP +端口(9200),我们可以看到此页面:
如果我没记错,那应该意味着与Elasticsearch的连接已打开?因此,在脚本中使用相同的externalIP + Port应该可以使我们获得结果?
关于我做错了什么的任何想法?
答案 0 :(得分:0)
我们发现以上内容在Web主机服务器上不起作用,因为该服务器缺少Elasticsearch PHP所需的某些功能。
我们将脚本移到了VPS,并在那里进行了几乎没有修改的设置,并且可以正常工作。
如果要在不能允许您安装新库的Web主机服务器上使用Elasticsearch脚本,请确保它们具有先运行它的要求。可以在以下页面上找到Elasticsearch PHP的要求:https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_installation_2.html
它们是:
PHP 7.0.0 or higher
Composer
ext-curl: the Libcurl extension for PHP (see note below)
Native JSON Extensions (ext-json) 1.3.7 or higher
Web主机服务器没有Libcurl扩展名,因此该脚本不起作用。