Выделите часть слова с помощью анализаторов ngram и пробелов

У меня есть индекс elasticsearch со следующими данными:

«Команда А» (как пример)

Мои настройки индекса:

"index": {
    "number_of_shards": "1",
    "provided_name": "tyh.tochniyot",
    "creation_date": "1481039136127",
    "analysis": {
      "analyzer": {
        "whitespace_analyzer": {
          "type": "whitespace"
        },
        "ngram_analyzer": {
          "type": "custom",
          "tokenizer": "ngram_tokenizer"
        }
      },
      "tokenizer": {
        "ngram_tokenizer": {
          "type": "ngram",
          "min_gram": "3",
          "max_gram": "7"
        }
      }
    },

Когда я ищу:

_search
{
"from": 0,
"size": 20,
"track_scores": true,
"highlight": {
  "fields": {
    "*": {
      "fragment_size": 100,
      "number_of_fragments": 10,
      "require_field_match": false
    }
  }
},
"query": {
  "match": {
    "_all": {
      "query": "Tea"
    }
  }
}

Я ожидаю получить результат выделения:

    "highlight": {
      "field": [
        "The A-<em>Tea</em>m"
      ]
}

Но я не получаю никаких изюминок вообще.

Причина, по которой я использую пробелы для поиска и ngram для индексации, заключается в том, что я не хочу, чтобы на этапе поиска разбивалось слово, которое я ищу, например, если я ищу «Команда», он найдет меня «Чай», «команда», « Команда"

Спасибо


person IB.    schedule 08.12.2016    source источник


Ответы (1)


Проблема заключалась в том, что мой анализатор и анализатор поиска работали в файле _all. Когда я поместил атрибут Analyzer в определенные поля, подсветка начала работать.

person IB.    schedule 08.12.2016