elasticsearch,Php,Html,elasticsearch" /> elasticsearch,Php,Html,elasticsearch" />

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

Php Elasticsearch搜索引擎不返回某些字段的结果,php,html,elasticsearch,Php,Html,elasticsearch,我有一个简单的搜索引擎,可以很好地在我的数据库中搜索。问题是它似乎并没有返回所有内容的搜索结果。我的意思是,如果我在“名称”字段下搜索某个内容,我会得到一个结果,但如果我在“标题”或“主管”字段中搜索某个内容,例如,我不会得到结果。即使我的某个“头衔”类似于“教父”,搜索该头衔也不会返回任何结果。同时,搜索“1972”,这是它的“年”,也是我的领域之一,确实给了我一个结果。这个结果显示了我的“头衔”、“导演”和“年份”。使用这些结果搜索其他两个中的任何一个都不会返回任何结果 我是php和elas

我有一个简单的搜索引擎,可以很好地在我的数据库中搜索。问题是它似乎并没有返回所有内容的搜索结果。我的意思是,如果我在“名称”字段下搜索某个内容,我会得到一个结果,但如果我在“标题”或“主管”字段中搜索某个内容,例如,我不会得到结果。即使我的某个“头衔”类似于“教父”,搜索该头衔也不会返回任何结果。同时,搜索“1972”,这是它的“年”,也是我的领域之一,确实给了我一个结果。这个结果显示了我的“头衔”、“导演”和“年份”。使用这些结果搜索其他两个中的任何一个都不会返回任何结果

我是php和elasticsearch的新手,所以可能有一些明显的地方我做错了。如果你需要任何其他细节来帮助我,我很乐意提供。我正在使用Elasticsearch 6.2

代码:


瑟克莫托



通常,您可以通过在
////\u explain
端点上运行相同的查询来诊断它为什么不起作用,例如,如果您想检查为什么在电影索引中找不到id为1的电影,您可以执行
127.0.0.1:9200/movies/movie/1/\u explain
并将查询作为postdata发送(邮递员可以提供帮助)多了解一点就好了。你使用了什么样的映射?你真的需要短语前缀查询吗?@JettroCoenradie啊,不。我应该提到我添加短语前缀类型是为了尝试解决我遇到的另一个问题。这不是完全必要的,但即使我把它去掉,问题仍然存在。至于映射,我不确定您想知道什么,但例如,“标题”为“教父”的文档位于lochalhost:9200/movies/movie/1下,并且在源代码下有字段“title”、“director2”和“year”。
<?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>