2016-03-25 10 views
1

Aşağıdaki kod benim için çalışıyor ve bu yüzden onların kategorilaravel için Elasticsearch - Bir veya daha fazla kategoriyle eşleşen belgeleri alın?

değerleri $ kategorilerden biriyle eşleşen tüm belgeleri alabilirsiniz

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

Nasıl yukarıdaki kodu değiştirebilirsiniz sorguyla eşleşen blog postaları döndürür

$ kategoriler değişken aşağıda koduyla çalıştı ben onay kutularından alıyorum değişken,

ama nedense boş sonuç döndürmek:

// $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 

Belgeleri eşleşen sözcüklere göre almak yerine bir veya daha fazla kategoriye dayanarak nasıl edinebileceğimiz hakkında bir fikriniz var mı?

cevap

0

filtered tümcesinde aynı düzeyde iki query tümceciğine sahip olmanıza izin verilmiyor.

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

        ] 

yalnızca kategoriler sorgulamak için çalışıyorsanız, öncelikle maddesini kaldırmak gerekir. Sorgunuzu

    "query"=> [ 
        "filtered"=> [ 
         "query"=>[ 
          "terms"=> [ 
           "category"=> $categories 
          ] 
         ] 
        ] 
        ] 
olarak yazabilirsiniz.
İlgili konular