2015-10-17 3 views
0

Автоматически оптимизирует фильтры elasticsearch? Например: в фильтре «и», если имеется несколько фильтров числового диапазона, определенных отдельно для операторов gte и lte вместо одного фильтра диапазона с ограничениями как lte, так и gte, вызовет ли это какие-либо проблемы с производительностью? Будет ли ES автоматически оптимизировать эти фильтры?Оптимизация elasticsearch и фильтров

"filter" : { 
"and" : [ 
    { 
    "range" : { 
      "age" : { 
      "gte": 10 
      } 
    } 
    }, 
    { 
    "range" : { 
      "age" : { 
       "lte": 90 
      } 
    } 
    }, 
    { 
    "range" : { 
      "age" : { 
      "gte": 30 
      } 
    } 
    }                
]} 

Update

Хотел добавить: в то время как это имеет смысл совместить границы, я хотел бы проверить это упаковывают, когда мои пользователи, которые могут динамически создавать фильтры делают такой сценарий.

ответ

2

Главное правило большого пальца с фильтрами заключается в том, что сначала следует применять самые ограничительные фильтры, чтобы уменьшить набор согласованных документов и позволить следующему фильтру работать как можно меньше документов.

Кроме того, в случае, если вы показывает, что на самом деле не имеет смысла иметь три различные range фильтров для одной и того же age поля, вы должны объединить их в один:

"filter": { 
    "range": { 
     "age": { 
      "gte": 30, 
      "lte": 90 
     } 
    } 
} 

Также обратите внимание, что вам следует предпочесть bool/must по and фильтрам, если это возможно, как объяснено in this excellent article, главным образом потому, что фильтры and не кэшируются.

И, наконец, вышесказанное применимо только к версии до версии 2.0 Elasticsearch. Начиная с версии 2.0, весь запрос/фильтр DSL будет completely overhauled, и запросы будут намного умнее.

UPDATE

Поскольку пользователи могут создавать свои собственные фильтры, основное правило остается, то вы должны попытаться заказать фильтры таким образом, чтобы наиболее ограничительная фильтр приходит первым. Однако, если ваши пользователи действительно имеют право создавать свои собственные фильтры, и вы не мешаете тому, что они представляют, тогда вы должны научить их (если это вообще возможно) наилучшим образом создавать фильтры.

Смежные вопросы