2017-02-14 10 views
1

私はelasticsearchを初めて使用しています。カテゴリーはcsv文字列として1つのフィールドに格納されています。私はelasticsearchでcsv文字列フィールドでフィルタリングする方法

"filter" => [ 
            "term"=> ["is_active"=>1], 
             "wildcard" => ["category"=>$category] 
           ] 

ようfilter配列を変更してみました。しかし、私はmalformed query, expected [END_OBJECT] but found [FIELD_NAME]エラーを取得する私は、PHPクライアントを使用していますし、私の現在の検索コードが

$params = [ 
      "index" => "products", 
      "type" => "product", 
      "body" => [ 
       "size" => "5", 
       "query" => [ 
        "function_score" => [ 
         "query" => [ 
          "bool" => [ 
           "must" => [ 
            "query_string" => [ 
             "fields" => ["category", "sub_category", "website", "services_offered", "keyword", "locations", "info"], 
              "query" => $keyword."*" 
            ] 
           ], 
           "filter" => [ 
            "term"=> ["is_active"=>1] 
           ] 
          ] 
         ], 
         "functions" => [ 
             [ 
              "field_value_factor" => ["field" => "rating", "modifier" => "none", "factor" => 1] 
             ], 
             [ 
              "field_value_factor" => ["field" => "reviews","modifier" => "log1p","factor" => 2] 
             ] 
            ] 
        ] 
       ] 
      ] 
     ]; 
     $results = $this->elasticclient->search($params); 

のように見えます。

また、phpクライアントのサイドノートで、最終的に生成されるデバッグ用のクエリを取得するにはどうすればよいですか?

答えて

0

termsフィルタはワイルドカードをサポートしていません。代わりにregexpフィルタを使用できます(Elasticsearchバージョン> = 2.0のクエリ)。

関連する問題