【发布时间】:2016-07-07 19:35:16
【问题描述】:
我正在尝试为 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.04 秒到 0.06 秒内返回结果(通过 cURL)。
有没有更好的方法来获得我需要的结果?
更新
field_a 是一个未分析的字符串。
field_b 是一个整数。
【问题讨论】:
-
field_a的值是数字吗?如果是这样,您可以使用gt和lt运算符进行大范围检查。 -
你真的需要一个恒定的分数块吗?无论如何,您都在使用过滤器块,因此得分对您来说无关紧要
-
@AvihooMamka
field_a不是数字。 -
@shiladitya 该查询是根据 Elasticsearch 官方网站上发布的示例创建的。
标签: elasticsearch elasticsearch-2.0