Сортировка Elasticsearch производится по нескольким индексам, поэтому один индекс имеет приоритет - PullRequest
0 голосов
/ 19 июня 2019

У меня есть 6 веб-сайтов, давайте назовем их A, B, C, D, E & M. M - главный веб-сайт, потому что с его помощью вы можете искать содержимое других, это я легко сделал, используя все индексы через запятую в поисковом запросе.

Однако теперь у меня есть новое требование, что на каждом веб-сайте вы можете искать все веб-сайты (это легко сделать, примените решение от М ко всем), НО отдавать приоритет результатам текущего веб-сайта.

Итак, если я ищу из C, сначала результаты должны быть из C, а затем из других на основе оценки.

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

1 Ответ

1 голос
/ 20 июня 2019

A повышающий запрос хорошо подходит для этой цели:

Пример данных

POST /_bulk
{"index":{"_index":"a"}}
{"message":"First website"}
{"index":{"_index":"b"}}
{"message":"Second website"}
{"index":{"_index":"c"}}
{"message":"Third website"}
{"index":{"_index":"d"}}
{"message":"Something irrelevant"}

Запрос

POST /a,b,c,d/_search
{
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "message": "website"
        }
      },
      "negative": {
        "terms": {
          "_index": ["b", "c", "d"]
        }
      }, 
      "negative_boost": 0.2
    }
  }
}

Ответ

{
  ...
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "a",
        "_type" : "_doc",
        "_id" : "sx-DkWsBHWmGEbsYwViS",
        "_score" : 0.2876821,
        "_source" : {
          "message" : "First website"
        }
      },
      {
        "_index" : "b",
        "_type" : "_doc",
        "_id" : "tB-DkWsBHWmGEbsYwViS",
        "_score" : 0.05753642,
        "_source" : {
          "message" : "Second website"
        }
      },
      {
        "_index" : "c",
        "_type" : "_doc",
        "_id" : "tR-DkWsBHWmGEbsYwViS",
        "_score" : 0.05753642,
        "_source" : {
          "message" : "Third website"
        }
      }
    ]
  }
}

Примечания

  1. Чем меньше вы сделаете negative_boost, тем более вероятно, что результаты от "активного индекса" победят другие индексы
  2. Есливы устанавливаете negative_boost на 0, вы гарантируете, что результаты «активного сайта» будут отсортированы первыми, но вы отбросите все оценки для всех остальных сайтов, поэтому оставшаяся сортировка будет произвольной.

Я считаю, что что-то вроде negative_boost: 0.1, которое представляет собой корректировку порядка значимости, должно дать вам то, что вы ищете.

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