Как ранжировать документы ElasticSearch на основе баллов

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

каждый документ имеет набор полей (is_verified: boolean, country: string, is_creator: boolean), также у меня есть другая служба, которая вызывает поиск ES для поиска документов, как я могу ранжировать полученные документы на основе этих полей? например, проверенный пользователь с совпадением должен быть первым, чем неподтвержденный.

есть ли какая-то оценка документа при индексировании документов? если да, могу ли я изменить его в соответствии с моими критериями?

что я должен прочитать / посмотреть, чтобы понять, как ранжироваться в эластичном поиске.

Благодарность


person gharabat    schedule 29.04.2021    source источник


Ответы (2)


Я предполагаю, что функция сортировки, упомянутая Микаэлем, довольно проста и должна охватывать ваши варианты использования. Дополнительную информацию см. В Elastic Doc. на что.

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

GET /yourindexname/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "Monica"
          }
        }
      ],
      "should": [
        {
          "term": {
            "is_verified": {
              "value": true,
              "boost": 2
            }
          }
        },
        {
          "term": {
            "is_creator": {
              "value": true,
              "boost": 2
            }
          }
        }
      ]
    }
  }
}

есть ли какая-то оценка документа при индексировании документов? если да, могу ли я изменить его в соответствии с моими критериями?

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

GET /yourindexname/_search
{
    "query" : {
        "match" : {
            "name": "Monica"
        }
    },
    "sort" : [
      {
        "relevancy": {
          "order": "desc"
        },
        "_score"
      }
    ]
}
person Chules    schedule 03.05.2021

Вы можете рассмотреть возможность использования Sort Api в ваших поисковых запросах. В примере ниже мы использовали поиск по стране поля и отсортировали результат с учетом логического поля (is_verified). Вы также можете добавить другое логическое поле внутри скобок сортировки.

GET /yourindexname/_search
{
    "query" : {
        "match" : {
            "country": "Iceland"
        }
    },
    "sort" : [
      {
      "is_verified": {
        "order": "desc"
      }
    }
    ]
}

person Mikael Amidi    schedule 29.04.2021