使用弹性搜索-php突出弹性搜索结果

时间:2016-11-07 12:22:30

标签: php elasticsearch

我试图在弹性搜索-php中突出我的结果,我用我的知识尝试了很多并在谷歌搜索,但没有运气,同样的查询在Sense中完美运行。我在Sense中的查询是

GET /bank/account/_search
{
"query" : {
    "match_phrase" : {
        "address" : "mill"
    }
},
"highlight": {
    "pre_tags" : ["<tag1>"],
    "post_tags" : ["</tag1>"],
    "fields" : {
        "address" : {}
    }
}
}

以上查询我得到了我需要的确切结果,这是我得到的结果

highlight": {
           "address": [
              "990 <tag1>Mill</tag1> Road"
           ]
        }

我尝试使用php进行相同的查询我没有得到突出显示的结果我的php查询

<?php
require 'vendor/autoload.php';
$client=new  Elasticsearch\Client();
$indexParams = [
        'index' => 'bank',
        'type'  => 'account',
        'body'  => [
            'query' => [
                'match' => [
                    "address" => "mill"
                ],                
    ], 
    'highlight' => [
                "pre_tags"  => "<tag1>",
                "post_tags" => "</tag1>",
                'fields'    => [
                   'address' => new \stdClass()
                ]
            ],
        ]
    ];
$results = $client->search($indexParams);
try {            
$response = $client->search($indexParams);
} catch (Exception $e) {            
var_dump($e->getMessage());        
}
echo '<pre>',print_r($response),'</pre>';
?>

我得到的结果是

[highlight] => Array
                            (
                                [address] => Array
                                    (
                                        [0] => 715 Mill Avenue
                                    )

                            )

1 个答案:

答案 0 :(得分:1)

我得到了上述问题的答案,我以json和JSON的形式发送参数对结果进行编码,当我在JSON中对结果进行编码时,前置标签出现在高亮查询中。

我的解决方案是

"highlight": {
      "address": [
        "817 Campus </span>Road</span>"
      ]
    }