2011-12-19 92 views
6

我是Elasticsearch的新手。我不認爲我完全理解查詢和過濾器的概念。在我的情況下,我只想使用過濾器,因爲我不想使用評分等高級功能。Elasticsearch來自SQL語句的DSL查詢

如何將以下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場?

謝謝

回答

2

在你的must子句後添加一個「should」子句。在一個bool查詢中,一個或多個should子句必須默認匹配。其實,你可以設置「minimum_number_should_match」爲任意數字,查看bool query docs

對於你的情況,這應該工作。

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

相同的概念適用於布爾過濾器。只需將「查詢」更改爲「過濾器」即可。布爾篩選器文檔是here

0

我碰到過這樣的杆柱4年太久已晚...

不管怎麼說,也許下面的代碼可能是有用的...

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}