Elasticsearch搜索引擎不返回某些字段的结果

时间:2018-05-14 07:39:55

标签: php html elasticsearch

我是一个简单的搜索引擎,可以在我的数据库中搜索。问题是它似乎没有返回所有内容的搜索结果。我的意思是,如果我在"名称"下搜索某些内容。我得到一个结果,但如果我在"标题"中搜索某些内容或"导演"例如,我没有得到结果。即使我的一个"标题"就像"教父",寻找那个头衔不会给我任何结果。同时,搜索" 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>

0 个答案:

没有答案