2015-02-06 167 views
6

我怎樣才能得到這個簡單的SQL查詢運行在elasticsearchelasticsearch匹配兩個字段

SELECT * FROM [MYTYPE其中A = -23.4807339和b = -46.60068

我真的有與它的語法,多比對查詢並不在我的情況下工作的煩惱,我應該使用哪種查詢類型?

回答

5

對於像您這樣的查詢bool過濾器優於and過濾器。請參閱here關於此建議的全部內容,以及爲什麼被認爲更高效。

這些雖這麼說,我會選擇做這樣的:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      {"term": {"a": -23.4807339}}, 
      {"term": {"b": -46.60068}} 
      ] 
     } 
     } 
    } 
    } 
} 
1

您可以通過and過濾器來解決此問題。舉例來說,如下所示:

{ 
    "size": 100, 
    "query" : {"filtered" : { 
    "query" : {"match_all" : {}}, 
    "filter" : {"and" : [ 
     "term" : {"a": -23.4807339}, 
     "term" : {"b": -46.60068} 
    ]} 
    }} 
} 

請確保將查詢指向正確的索引和類型。請注意,我將返回集的大小指定爲100,您必須指定一個適合您的用例的值。

篩選查詢here以及更多關於and篩選器here的更多信息。

+0

謝謝!有效!如果我希望它返回所有值,如果沒有使用許多查詢,有什麼辦法可以做到這一點? – 2015-02-06 16:20:58

+0

@ViníciusMariano如果你要返回大量的文檔,最好的辦法可能是查看'scroll'功能(它與其他數據庫技術中的遊標有一些相似之處)。更全面的文檔在這裏:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html – rchang 2015-02-06 18:15:41