【问题标题】:multifield searching in elasticsearch did not work?elasticsearch 中的多字段搜索不起作用?
【发布时间】:2016-06-29 19:04:59
【问题描述】:

我试图在弹性搜索中显示与文章标题或正文部分匹配的所有文档,我在 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 与正文内容匹配或两者都匹配的文档列表,我应该怎么做这样做。

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    您的bool/should 当前是一个关联数组,第二个匹配项覆盖了第一个匹配项。使用普通数组代替 match 查询与 [...]:

    $params = [
            'index' => 'pages',
            'type' => 'page',
            'body' => [
                'query' => [
                    'bool'=>[
                        'should'=>[
                           [ 'match'=>['title'=>$titlesearch] ],
                           [ 'match'=>['body'=>$bodysearch] ]
                        ]
                    ]
                ]
            ]
        ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2014-12-09
      • 2015-03-15
      • 2013-09-12
      • 1970-01-01
      相关资源
      最近更新 更多