Как да класирате ElasticSearch документи въз основа на резултати

Имам еластичен индекс за търсене, който съдържа хиляди документи, като всеки документ представлява потребител.

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

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

какво да прочета/гледам, за да разбера как да класирам в еластично търсене.

Благодаря


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


Отговори (2)


Предполагам, че функцията за сортиране, спомената от Микаел, е доста ясна и трябва да покрива вашите случаи на употреба. Вижте Elastic Doc за повече информация на това.

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

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

Можете да обмислите използването на API за сортиране във вашите заявки за търсене. В примера по-долу използвахме търсенето в полето държава и сортирахме резултата по отношение на булево поле (is_verified). Можете също да добавите другото булево поле в скоби за сортиране.

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

person Mikael Amidi    schedule 29.04.2021