Увеличение документов в результатах поиска, которые соответствуют массиву - PullRequest
0 голосов
/ 17 октября 2019

У меня есть этот относительно сложный поисковый запрос, который уже создается и работает с идеальной сортировкой.

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

текущий код: -

"sort": [
{
  "_script": {
    "type": "number",
    "script": {
      "lang": "painless",
      "source": "double pscore = 0;for(id in params.boost_ids){if(params._source.midoffice_master_id == id){pscore = -999999999;}}return pscore;",
      "params": {
        "boost_ids": [
         3,
         4,
         5
        ]
      }
    }
  }
}]

Объяснение кода выше: -

Например, если запрос на совпадение даст результат, подобный:

[{m_id: 1, name: A}, {m_id: 2, name: B}, {m_id: 3, name: C}, {m_id: 4, name: D}, ...]

Итак, я хочу увеличить документ с помощью массива m_id [3, 4, 5], который затем преобразует результат в:

[{m_id: 3, name: C}, {m_id: 4, name: D}, {m_id: 1, name: A}, {m_id: 2, name: B}, ...]

1 Ответ

1 голос
/ 17 октября 2019

Вы можете использовать приведенный ниже запрос, используя Запрос оценки функции (для повышения) и Запрос запроса (используется для запроса массива значений)

Обратите внимание, чтологика, которую я упомянул, содержится в предложении should запроса bool .

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}   //just a sample must clause to retrieve all docs
        }
      ],
      "should": [
        {
          "function_score": {     <---- Function Score Query
            "query": {
              "terms": {          <---- Terms Query
                "m_id": [
                  3,4,5
                ]
              }
            },
            "boost": 100          <---- Boosting value
          }
        }
      ]
    } 
  }
}

Таким образом, вы можете полностью удалить логику сортировки и добавить приведенный выше function queryв вашем предложении should, которое даст вам результаты в том порядке, в котором вы ищете.

Обратите внимание, что вам нужно найти способ правильно добавить логику в случае, если у вас сложный запрос, и если вы что-то боретесь, дайте мне знать. Я был бы рад помочь !!

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...