2016-05-30 7 views
0

Я хочу отсортировать результаты своего запроса после некоторых правил повышения, и в то же время я хочу, чтобы они были отсортированы по мере создания по дате создания, если я добавлю сортировку created_at, она изменит все, и мои результаты больше не актуальны. Поэтому я предполагаю, что единственный способ сделать это - увеличить поле created_at (у самого нового есть самый большой бонус при вычислении балла для этого повышения), но я не знаю, как его реализовать. Это мой вопрос:Как увеличить ближайшее поле created_at в Elasticsearch?

query = { 
    "query" : { 
    "bool" : { 
     "must" : [ 
     { 
      "range" : { 
      "deadline" : { 
       "gte" : "2016-05-30T11:39:10+02:00" 
      } 
      } 
     }, 
     { 
      "terms" : { 
      "state" : [ 
       "open" 
      ] 
      } 
     }, 
     { 
      "query_string" : { 
      "query" : "chant", 
      "default_operator" : "AND", 
      "analyzer" : "search_francais", 
      "fields" : [ 
       "title^6", 
       "description", 
       "brand", 
       "category_name" 
      ] 
      } 
     } 
     ] 
    } 
    }, 
    "filter" : { 
    "and" : [ 
     { 
     "geo_distance" : { 
      "distance" : "40km", 
      "location" : { 
      "lat" : 48.855736, 
      "lon" : 2.32927300000006 
      } 
     } 
     } 
    ] 
    }, 
    "sort" : [ 
    { 
     "_score" : "desc" 
    }, 
    #{ 
    # "created_at" : "desc" ==> i tried this but it doesnt change results 
    #} 
    ] 
} 

ответ

0

Попробуйте добавить ваше условие в блокировку.

i) Если созданная дата должна быть ближе к значению в поисковом запросе или у вас есть какая-либо идея о том, как закрыть дату, задайте запрос диапазона. ii) Если вы не уверены в всех этих значениях, можно использовать функцию распада. В этом случае запрос должен быть изменен на запрос функции.

{ 
    "query" : { 
    "bool" : { 
     "must" : [ 
     { 
      "range" : { 
      "deadline" : { 
       "gte" : "2016-05-30T11:39:10+02:00" 
      } 
      } 
     }, 
     { 
      "terms" : { 
      "state" : [ 
       "open" 
      ] 
      } 
     }, 
     { 
      "query_string" : { 
      "query" : "chant", 
      "default_operator" : "AND", 
      "analyzer" : "search_francais", 
      "fields" : [ 
       "title^6", 
       "description", 
       "brand", 
       "category_name" 
      ] 
      } 
     } 
     ], 
     "should": [ 
     {"created_at" : "condition here .. "} 
     ] 
    } 
    }, 
    "filter" : { 
    "and" : [ 
     { 
     "geo_distance" : { 
      "distance" : "40km", 
      "location" : { 
      "lat" : 48.855736, 
      "lon" : 2.32927300000006 
      } 
     } 
     } 
    ] 
    } 
}