Elasticsearch multi-match не возвращает все результаты при предоставлении пустой строки - PullRequest
1 голос
/ 29 апреля 2020

У меня в общей сложности 1783 записи, и я хочу, чтобы ES возвратил их все в случае, если запрос multi_match не предоставлен (searchObject.query = '')

Мне удастся сделать это, если Я передаю пустой массив в query.bool. должен , поэтому теоретически я могу обновить объект ES ниже на основе значения searchObject.query, но я не уверен, что это хорошая идея.

{
    _source: [
        'id',
        'event',
        'description',
        'element',
        'date'
    ],
    track_total_hits: true,
    query: {
        bool: {
            should: [{
                multi_match:{
                    query: searchObject.query
                    fields: ["element","description","nar.*","title","identifier"]
                }
            }],
            filter: []
        }
    },
    highlight: { fields: { '*': {} } },
    sort: [],
    from: 0,
    size: 10
}

Есть предложения?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете добавить match_all к should:

{
  "_source": [
    "id",
    "event",
    "description",
    "element",
    "date"
  ],
  "track_total_hits": true,
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "",
            "fields": [
              "line",
              "element",
              "description",
              "nar.*",
              "title",
              "identifier"
            ]
          }
        },
        {
          "match_all": {}
        }
      ],
      "filter": []
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  },
  "sort": [],
  "from": 0,
  "size": 10
}

Это то, для чего обычно. ИМХО, пустая строка должна быть проверена перед тем, как выполнить запрос ES. Я предполагаю, что это от автозаполнения или тому подобное.

...