2016-03-25 1 views
1

次のコードは、私の作品と私は彼らのカテゴリはララベル用の弾性検索 - 1つまたは複数のカテゴリに一致するドキュメントを入手しますか?

$カテゴリのいずれかに一致するすべての文書を取得することができます

$params = [ 
      'index' => 'blog', 
      'type' => 'post', 
      'body' => [ 
       'query' => [ 
        'multi_match' => [ 
         'query' => $request->get('query'), 
         'fields' => ['title', 'description'] 
        ] 
       ] 
      ] 
     ]; 
$response = \Elasticsearch::search($params); // works perfect 

がどのように私は上記のコードを変更することができますクエリに一致するブログ記事を返します。

$カテゴリ変数は、私は以下のコードではなく、それは空の結果を返す何らかの理由で試してみました、私はチェックボックスから取得しています変数、

です:

// $categories = $request->get('categories'); 
$categories = ["News", "Technology"]; 
$params = [ 
      'index' => 'blog', 
      'type' => 'post', 
      'body' => [ 

       "query"=> [ 
        "filtered"=> [ 
         "query"=> [ 
          "match_all"=> [] 
         ], 
         "query"=>[ 
          "terms"=> [ 
           "category"=> $categories 
          ] 
         ] 

        ] 
       ] 
      ] 
     ]; 

$response = \Elasticsearch::search($params); // return 0 hits 

一致する単語に基づいて取得するのではなく、1つ以上のカテゴリに基づいてドキュメントを取得する方法については、

答えて

0

query句は、同じレベルのfiltered句内に2つありますが、これは許可されていません。

"query"=> [ 
        "filtered"=> [ 
         "query"=> [ <-- (1) 
          "match_all"=> [] 
         ], 
         "query"=>[ <-- (2) 
          "terms"=> [ 
           "category"=> $categories 
          ] 
         ] 

        ] 

カテゴリのみをクエリする場合は、最初の句を削除する必要があります。あなたの問い合わせは

    "query"=> [ 
        "filtered"=> [ 
         "query"=>[ 
          "terms"=> [ 
           "category"=> $categories 
          ] 
         ] 
        ] 
        ] 
と書くことができます
関連する問題