Elasticsearch: Ранжирование по наибольшему количеству совпадений

avatar
dr.calix
9 августа 2021 в 05:09
33
1
0

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

Например, я ищу:

  • дружелюбный
  • честная личность
  • отличные коммуникативные навыки

Записи с наибольшим количеством совпадений будут иметь наивысший рейтинг. Я попробовал предложенный здесь https://coderhelper.com/a/45319822/2445717, но не работал так, как я ожидал.

Ниже мой текущий запрос:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "job_description": {
                    "query": "friendly",
                    "operator": "and"
                    
                  }
                }
              },
              {
                "match": {
                  "job_description": {
                    "query": "honest personality",
                    "operator": "and"
                    
                  }
                }
              },
              {
                "match": {
                  "job_description": {
                    "query": "excellent communication skills",
                    "operator": "and"
                    
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
Источник

Ответы (1)

avatar
dr.calix
17 августа 2021 в 11:12
0

match_query & minimum_should_match сделали свое дело.

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

{
  "query": {
    "bool": {
      "should": [
        {
          "match_query": {
            "job_description": {
              "query": "friendly",
              "boost": 1
            }
          }
        },
        {
          "match_query": {
            "job_description": {
              "query": "honest personality",
              "boost": 1
            }
          }
        },
        {
          "match_query": {
            "job_description": {
              "query": "excellent communication skills",
              "boost": 1
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}