2015-03-19 3 views
1

В документации http://www.elastic.co/guide/en/elasticsearch/guide/current/boosting-by-popularity.html#CO112-4 объясняется, как повысить документы в соответствии с числовым полем. Но field_value_factor не работает, если поле отсутствует для любого из документов. Каков наилучший способ, когда поле обязательно отсутствует?elasticsearch boost по популярности, когда поле может отсутствовать

ответ

1

Способ сделать это, например,

{ 
    "query":{ 
     "function_score":{ 
     "functions":[ 
      { 
       "filter":{ 
        "exists":{ 
        "field":"views" 
        } 
       }, 
       "field_value_factor":{ 
        "field":"views", 
        "factor":1.2, 
        "modifier":"log1p" 
       } 
      }, 
      { 
       "FUNCTION":{} 
      } 
     ] 
     } 
    } 
} 

i.e применить массив пар фильтров функций. Первая функция проверяет наличие поля (views в моем случае), а вторая имеет отсутствующий фильтр (эквивалент match_all) и пустую функцию - то есть счет не модифицируется.

+1

Лучшим решением должно быть помещение 'missing: 1' там, чтобы вы не потеряли документы – ClojureMostly

+0

, где бы это произошло? – amn41

+0

под 'field_value_factor' – ClojureMostly

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