Сортировка результатов ElasticSearch (релевантная оценка) на основе определенного поля (повышение) - PullRequest
0 голосов
/ 23 сентября 2019

Я использую ElasticSearch 6.6.Мое приложение создает индекс ES, извлекая данные из разных источников данных.Поиск не указывает источник данных.Он просто строит запрос примерно так:

GET employerdata/_search
{ 
  "query": 
  { 
    "bool": {
      "must": [
          {  "match" : {"name" : {
        "query": "WALMART",
        "fuzziness": "3"
      }}},
          {  "match" : {"state" : "TX"}}
        ]
    } 
  }

}

Есть поле с именем "источник данных".Однако он не используется для построения запроса.Тем не менее, это часть результата.По сути, я хочу неявно использовать это поле при построении запроса.например, если документ имеет «dataSource», равный «A», то документ должен быть в верхней части результирующего набора.Другими словами, я хочу повысить оценку на основе поля «источник данных».Однако я все еще хочу получить результат, даже если документ был индексирован из другого «источника данных», такого как «B».

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Для добавления поверх ответа @ apt-get_install_skill.Если необходимо повышение во время запроса вместо индексации.Вы можете использовать function_score

GET employer/_search
{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "filter": {
            "match": {
              "dataSource": "B"
            }
          },
          "weight": 2
        }
      ]
    }
  }
}
0 голосов
/ 30 сентября 2019
GET employerdata/_search
{ 
 "query": 
 { 
"function_score": {
  "query": {"bool": {
  "must": [
      {  "match" : {"beName" : {
    "query": "KROGER",
    "fuzziness": "3"
  }}},
      {  "match" : {"beZip" : "47119"}}
    ]
} },
  "functions": [
    { "filter": {"match": {"dataSource" : "eeo1"}},
      "random_score": { },
      "weight": 25
    }
  ]
} 

}

}

0 голосов
/ 24 сентября 2019

Посмотрите на параметр буста, который вы можете добавить к вашим запросам (https://www.elastic.co/guide/en/elasticsearch/reference/6.6/mapping-boost.html).). Вы устанавливаете этот буст для определенных значений ваших полей (например, dataSource = A). Это нефильтр (dataSource = B все равно будет возвращен), но он увеличивает релевантность конкретных документов, соответствующих запросу.

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