Сортировка отдельных подблоков Elasticsearch - PullRequest
0 голосов
/ 16 октября 2018

В настоящее время я пытаюсь сделать отдельные виды нескольких блоков результатов одним запросом текстового поиска.К сожалению, я не смог найти правильный синтаксис, например, что результат запроса отсортирован правильно.

Мой индекс содержит следующие поля:

"category_id": { "type": "integer" }
"type":        { "type": "keyword"}
"subject":     { "type": "text"},
"body":        { "type": "text"},
"date":        { "format": "yyyy-MM-dd HH:mm:ss", "type": "date"}

Описание:
- Поле «category_id» является числовым значением
- Поле «type» может быть «E» или «U»
- Поле «subject» содержит текст
- Поле «body» содержит текст
- Поле «дата» содержит дату

Я пытаюсь добиться того, чтобы поиск строки внутри «subject» и «body» и соответствующего category_id привел к появлению списка результатов, которыйимеет специальную сортировку.

Пример запроса :
Поиск текста "foo" в полях "subject" и "body" для всех записей с "category_id", равным 12.

Сортировка результатов :
Первый блок : Результаты с типом == "E"
Второй блок : Результаты с типом ==«U»

Результаты в обоих вышеупомянутых блоках должны быть отсортированы снова:

Первый блок : результаты с моремrch попаданий по полю "субъект"
второй блок : результаты с поисковыми попаданиями по полю "тело"

Наконец, эти два блока должны быть отсортированы пополе «дата» каждое.

Сортировка показана как рисунок

Мой текущий запрос выглядит так:

    {
      "query": {
        "function_score": {
          "query": {
            "bool": {
              "must": {
                "multi_match": {
                  "query": "foo",
                  "operator": "and",
                  "fields": [
                    "subject^10",
                    "body^0.1"
                  ]
                }
              },
              "filter": {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "category_id": 106
                      }
                    }
                  ]
                }
              }
            }
          },
          "exp": {
            "date": {
              "origin": "now",
              "scale": "7d",
              "decay": 0.9
            }
          }
        }
      },
      "sort": {
        "type": {
          "order": "desc"
        },
        "_score": {
          "order": "desc"
        }
      }
    }

Сортировка по типу работает нормально, носортировка субблока по теме, телу и дате в какой-то момент путается.Моя идея состояла в том, чтобы использовать оценки для совпадений и даты, чтобы достичь необходимой сортировки ...

Есть ли способ выполнить этот тип модульной подсортировки?

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