0

動的な量の用語をフィルタに渡したいというクエリがあります。配列としてこれを渡すためにとにかくありますか?私はいくつかの異なることを試しましたが、常にelasticsearchからの不正なリクエストエラーで終わります。 Ruby on Railsとelasticsearch-rails gemを使用しています。ここに私のクエリは次のとおりです。ElasticSearch - フィルタリングする用語の配列を渡す

@products = Product.search(
    query:{ 
     function_score:{ 
     query:{ 
      bool:{ 
      must:{ 
       multi_match:{ 
       fields: ['brand^5', '_all'], 
       query: "#{query}", 
       fuzziness: "AUTO" 
       } 
      }, 

       filter:{ 
       bool:{ 
        must:[ 
        {term: {"brand":"NordicTrack"}}, 
        {term: {"product_type":"Treadmill"}} 
        ] 
       } 
       } 

      } 
     }, 
     field_value_factor:{ 
      field: "popularity", 
      modifier: "log1p" 
     } 
     } 
    }).page(page).per(25) 

私はこのような配列を渡したいと思います:

array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}] 

このような "しなければならない" INTOステートメント:

@products = Product.search(
    query:{ 
     function_score:{ 
     query:{ 
      bool:{ 
      must:{ 
       multi_match:{ 
       fields: ['brand^5', '_all'], 
       query: "#{query}", 
       fuzziness: "AUTO" 
       } 
      }, 

       filter:{ 
       bool:{ 
        must: array 
       } 
       } 

      } 
     }, 
     field_value_factor:{ 
      field: "popularity", 
      modifier: "log1p" 
     } 
     } 
    }).page(page).per(25) 

はしかし、これはA原因ESによる不正なリクエストエラー。

答えて

1

配列要素が文字列でないことを確認してください。あなたの例が示しています

array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}] 

それは次のようになります。

array = [{term: {"brand":"NordicTrack"}}, {term: {"product_type":"Treadmill"}}] 

あなたはRubyで配列を構築している場合、それはこのようなものになります。

array = [] 
array.push term: {"brand":"NordicTrack"} 
array.push term: {"product_type":"Treadmill"} 
関連する問題