MySQL查询到Elasticsearch查询

时间:2016-07-07 07:40:39

标签: elasticsearch elasticsearch-2.0

我正在尝试为Elasticsearch查询获得最佳性能 我需要类似于MySQL查询的东西:

SELECT * FROM table WHERE field_a IN ('value1', 'value2') AND field_b = value

field_a的值可以介于1之间,假设为20。 所有字段都需要完全匹配。

现在我正在使用查询:

{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "should" : [
                 { "term" : {"field_a" : "value1"}}, 
                 { "term" : {"field_a" : "value2"}} 
              ],
              "must" : {
                 "term" : {"field_b" : "value"} 
              }
           }
         }
      }
   }
} 

此时索引大约有3000万个文档,此查询以0.04s - 0.06s(通过cURL)返回结果。
有没有更好的方法来获得我需要的结果?

更新
field_a是未分析的字符串 field_b是一个整数。

2 个答案:

答案 0 :(得分:2)

如果您想要field_a进行比较的值列表,可以使用以下查询:

{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "should" : [
                 { "terms" : {"field_a" : ["value1", "value2", "etc..."]}} 
              ],
              "must" : {
                 "term" : {"field_b" : "value"} 
              }
           }
         }
      }
   }
} 

答案 1 :(得分:1)

必须为field_a和field_b创建索引。不要在查询中使用* - 它会降低性能。相反* - 写下你需要的字段。