2016-06-29 14 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は連想配列であり、2番目の一致は最初の一致を上書きしています。 [...]matchクエリを処理して、代わりにプレーン配列を使用してください:

$params = [ 
     'index' => 'pages', 
     'type' => 'page', 
     'body' => [ 
      'query' => [ 
       'bool'=>[ 
        'should'=>[ 
         [ 'match'=>['title'=>$titlesearch] ], 
         [ 'match'=>['body'=>$bodysearch] ] 
        ] 
       ] 
      ] 
     ] 
    ]; 
関連する問題