Я пытаюсь получить наилучшую производительность для запроса Elasticsearch.
мне нужно что-то похожее на этот запрос MySQL:Запрос MySQL на запрос Elasticsearch
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"}
}
}
}
}
}
}
Индекс имеет на данный момент около 30 миллионов документов и этот запрос возвращает результат в 0.04s - 0.06s (через Curl).
Есть ли лучший способ получить результаты, которые мне нужны?
Обновление
Поле__ - это строка, которая не анализируется.
Поле field_b является целым числом.
Является ли значение 'field_a' числовым? Если это так, вы можете использовать операторы 'gt' и' lt' для проверки широкого диапазона. –
Вам действительно нужен постоянный счетный блок? Вы все равно используете блок фильтров, поэтому для вас не будет иметь значения – shiladitya
@AvihooMamka 'field_a' не является числовым. –