2016-06-29 5 views
0

я попытался показать все документы, который соответствует либо названию или тело раздела статьи в упругом поиске и я написал следующий код в PHPмногопользовательский поиск в elasticsearch не работает?

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

Ваш bool/should в настоящее время является ассоциативным массивом, а второе соответствие перезаписывает первый. Используйте простой массив вместо того, чтобы замаскировать свои match запросов с помощью [...]:

$params = [ 
     'index' => 'pages', 
     'type' => 'page', 
     'body' => [ 
      'query' => [ 
       'bool'=>[ 
        'should'=>[ 
         [ 'match'=>['title'=>$titlesearch] ], 
         [ 'match'=>['body'=>$bodysearch] ] 
        ] 
       ] 
      ] 
     ] 
    ]; 
Смежные вопросы