我是一个简单的搜索引擎,可以在我的数据库中搜索。问题是它似乎没有返回所有内容的搜索结果。我的意思是,如果我在"名称"下搜索某些内容。我得到一个结果,但如果我在"标题"中搜索某些内容或"导演"例如,我没有得到结果。即使我的一个"标题"就像"教父",寻找那个头衔不会给我任何结果。同时,搜索" 1972",这是"年"它是我和我的一个领域,给我一个结果。这个结果显示我" title","导演"和"年"。使用这些结果搜索其他任何两个结果都不会返回任何内容。
我是php和elasticsearch的新手所以可能有一些明显的我做错了。如果您需要任何其他详细信息来帮助我,我将乐意为您提供帮助。我使用的是Elasticsearch 6.2。
代码:
<?php
error_reporting(0);
require_once 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$es = $client;
if (isset($_GET['q'])) {
$q = $_GET['q'];
$query = $es->search([
'body' => [
'query' => [
'bool' => [
'should' => [
'multi_match' => [
'query' => $q,
'type' => 'phrase_prefix',
'fields' => [
'name', 'type', 'content',
'title', 'director', 'year',
'play_name', 'speaker'],
'operator' => 'and'
]
]
]
]
]
]);
}
if($query['hits']['total'] >=1 ) {
$results = $query['hits']['hits'];
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Søkemotor</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<div class="img">
<img src="img/DigRevLogo" alt="Logo" width="600" height="150" class="img">
</div>
<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>
<?php
$noresult = "Ingen resultat på søket av $q.";
if(isset($results)) {
foreach($results as $r) {
?>
<div class="result">
<a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['name'];?></a>
<a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['title'];?></a>
<a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['play_name'];?></a>
<br>
<?php echo $r['_source']['type'];?>
<?php echo $r['_source']['director'];?>
<br>
<?php echo $r['_source']['content'];?>
<?php echo $r['_source']['year'];?>
<?php echo $r['_source']['speaker']?>
<?php echo $r['_source']['description'];?>
</div>
<div class="noresult">
<?php
}
}
else echo "<CENTER>$noresult</CENTER>";
?>
</div>
</body>
</html>