6

Elasticsearchは初めてです。クエリとフィルターの概念を完全には理解していないと思います。私の場合、スコアリングのような高度な機能を使用したくないので、フィルターを使用したいだけです。

次のSQLステートメントをelasticsearchクエリに変換するにはどうすればよいですか?

SELECT * FROM advertiser 
WHERE company like '%com%' 
AND sales_rep IN (1,2) 

私がこれまでに持っているもの:

curl -XGET 'localhost:9200/advertisers/advertiser/_search?pretty=true' -d ' 
 { 
     "query" : { 
         "bool" : { 
             "must" : { 
                 "wildcard" : { "company" : "*com*" } 
             } 
         } 
     }, 
     "size":1000000 

}' 

sales_repフィールドにORフィルターを追加するにはどうすればよいですか?

ありがとう

4

2 に答える 2

2

must句の後に「should」句を追加します。boolクエリでは、デフォルトで1つ以上のshould句が一致する必要があります。実際には、「minimum_number_should_match」を任意の数に設定できます。boolクエリのドキュメントを確認してください。

あなたの場合、これはうまくいくはずです。

    "should" : [
        {
            "term" : { "sales_rep_id" : "1" }
        },
        {
            "term" : { "sales_rep_id" : "2" }
        }
    ],

同じ概念がブールフィルターでも機能します。「query」を「filter」に変更するだけです。ブールフィルターのドキュメントはこちらです。

于 2011-12-19T19:47:40.333 に答える
0

私はこの投稿に4年遅れて出くわしました...

とにかく、おそらく次のコードが役立つかもしれません...

{
  "query": {
    "filtered": {
      "query": {
        "wildcard": {
          "company": "*com*"
        }
      },
      "filter": {
        "bool": {
          "should": [
            {
              "terms": {
                "sales_rep_id": [ "1", "2" ]
              }
            }
          ]
        }
      }
    }
  }
}
于 2016-03-01T10:40:54.253 に答える