Как повысить значение ближайшего поля созданного в Elasticsearch?

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

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
    #}
  ]
}

1 ответ

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

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
          }
        }
      }
    ]
  }
}
Другие вопросы по тегам