2015-02-06 142 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