Elasticsearch создать карту отображения

Я слежу за этим блогом, чтобы реализовать функцию автозаполнения. Я попытался создать точное отображение, но наткнулся на какую-то ошибку.

Ниже приведен мой предполагаемый запрос на отображение.

curl -XPUT "http://localhost:9200/blurays " -d'
{
   "settings": {
      "analysis": {
         "filter": {
            "nGram_filter": {
               "type": "nGram",
               "min_gram": 2,
               "max_gram": 20,
               "token_chars": [
                  "letter",
                  "digit",
                  "punctuation",
                  "symbol"
               ]
            }
         },
         "analyzer": {
            "nGram_analyzer": {
               "type": "custom",
               "tokenizer": "whitespace",
               "filter": [
                  "lowercase",
                  "asciifolding",
                  "nGram_filter"
               ]
            },
            "whitespace_analyzer": {
               "type": "custom",
               "tokenizer": "whitespace",
               "filter": [
                  "lowercase",
                  "asciifolding"
               ]
            }
         }
      }
   },
   "mappings": {
      "movies": {
         "_all": {
            "index_analyzer": "nGram_analyzer",
            "search_analyzer": "whitespace_analyzer"
         },
         "properties": {
            "addToCartUrl": {
               "type": "string",
               "index": "no",
               "include_in_all": false
            },
            "format": {
               "type": "string",
               "index": "not_analyzed"
            },
            "mpaaRating": {
               "type": "string",
               "index": "not_analyzed",
               "include_in_all": false
            },
            "price": {
               "type": "double",
               "include_in_all": false
            }
         }
      }
   }
}'

Вот ошибка, которую я получаю:

analyzer on field [_all] must be set when search_analyzer is set

Я использую последнюю версию ES, то есть 2.3, и это было написано 2 года назад. Я только начал изучать ES. Что может быть возможным решением этого?

2 ответа

Решение

При определении _all поле, которое нужно заменить index_analyzer с analyzer как это было переименовано в 2.0.

     "_all": {
        "analyzer": "nGram_analyzer",
        "search_analyzer": "whitespace_analyzer"
     },

Согласен, сообщение об ошибке могло бы быть и лучше.

Анализатор индекса был удален в asticsearch 2.x.

https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_mapping_changes.html

Другие вопросы по тегам