Запрос Elasticsearch, который предотвращает появление одинакового значения поля рядом друг с другом - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть несколько документов вроде этого:

{
  "text": "sample - very high relevancy",
  "myField": "a1"
},
{
  "text": "sample - less relevancy",
  "myField": "a2"
},
{
  "text": "sample - high relevancy",
  "myField": "a1"
},
{
  "text": "sample - very less relevancy",
  "myField": "a3"
}

Я написал запрос о поисковом сходстве и прочее ... Я пытаюсь отсортировать его так, чтобы никогда не появлялось два одинаковых значения myFieldдруг другу.

Я хочу, чтобы все отличные значения myField отображались в верхней части результатов, затем повторялись.

То, что я ищу , эторасширенный запрос сортировки, который снижает оценку документа, если в результате уже появилось поле myField.

В соответствии с моим примером, я ожидаю, что мой результат будет :

{
  "text": "sample - very high relevancy",
  "myField": "a1"
},
{
  "text": "sample - less relevancy",
  "myField": "a2"
},
 {
  "text": "sample - very less relevancy",
  "myField": "a3"
},
{
  "text": "sample - high relevancy",
  "myField": "a1"
},
{
  "text": "sample - extremely less relevancy",
  "myField": "a5"
}

Поле высокой релевантности появилось внизу результатов, потому что значение a1 уже появилось в верхней части, а другие поля a2 a3 для меня важнее.Кроме того, если документ не имеет отношения к нашему запросу, он должен быть в самом низу, независимо от того, не указано ли значение myField.

1 Ответ

0 голосов
/ 16 февраля 2019

Вам нужно будет использовать Термины агрегации и изменить режим сортировки.

Ниже должен работать псевдопросмотр (так как у меня нет бегущей резинки): агрегация используется для клубированияповторяющиеся результаты в одном ведре.

Сортировка применяется к количеству ведер , так что ведра с числом 1 располагаются сверху.

{
"query" : {
  // Your search query/filter goes here
},
"aggs": {
  "myagg": {
    "terms": {
      "field": "myField",
      "order": {
        "myagg>_count" : "asc"
      }
    }
  }
}

}

...