在elasticsearch中进行多字段搜索不起作用?

时间:2016-06-29 11:02:27

标签: php elasticsearch

我试图在弹性搜索中显示所有匹配文章的标题或正文部分的文档,我在php中编写了以下代码

if(!empty($_GET))
{
    $bodysearch=$_GET['bodysearch'];
    $titlesearch=$_GET['titlesearch'];
    $params = [
            'index' => 'pages',
            'type' => 'page',
            'body' => [
                'query' => [
                    'bool'=>[
                        'should'=>[
                            'match'=>['title'=>$titlesearch],
                            'match'=>['body'=>$bodysearch]
                        ]
                    ]
                ]
            ]
        ];
    $result = $client->search($params)
}

并写下以显示结果

foreach($result['hits']['hits'] as $hit)
{
    $sources=$hit['_source'];
    echo '<a href="javascript:;" style="display:block;">'.$sources['title'].'</a>';
    echo substr($sources['body'], 0,100).'....';
}

它仅显示其内容与$bodysearch中提供的内容相匹配的列表文档,但我想获取与$titlesearch匹配的文档列表或将$bodysearch与正文内容匹配或匹配两者,我该怎么办。

1 个答案:

答案 0 :(得分:1)

您的bool/should当前是一个关联数组,第二个匹配正在覆盖第一个匹配数组。使用普通数组,而不是使用match

来覆盖[...]个查询
$params = [
        'index' => 'pages',
        'type' => 'page',
        'body' => [
            'query' => [
                'bool'=>[
                    'should'=>[
                       [ 'match'=>['title'=>$titlesearch] ],
                       [ 'match'=>['body'=>$bodysearch] ]
                    ]
                ]
            ]
        ]
    ];