Elasticsearch анализатор не заменяет апостофы (') - PullRequest
0 голосов
/ 22 мая 2019

Использование Elasticsearch v7.0
Это анализатор, который я реализовал (http://phoenyx2:9200/search_dev/_settings?pretty=true):

{
    "search_dev": {
        "settings": {
            "index": {
                "refresh_interval": "30s",
                "number_of_shards": "1",
                "provided_name": "search_dev",
                "creation_date": "1558444846417",
                "analysis": {
                    "analyzer": {
                        "my_standard": {
                            "filter": [
                                "lowercase"
                            ],
                            "char_filter": [
                                "my_char_filter"
                            ],
                            "tokenizer": "standard"
                        }
                    },
                    "char_filter": {
                        "my_char_filter": {
                            "type": "mapping",
                            "mappings": [
                                "' => "
                            ]
                        }
                    }
                },
                "number_of_replicas": "1",
                "uuid": "hYz0ZlWFTDKearW1rpx8lw",
                "version": {
                    "created": "7000099"
                }
            }
        }
    }
}

Я воссоздала весь индекс, и в анализе до сих пор нет изменений.
Я также запустил это: URL (phoenyx2:9200/search_dev/_analyze)

{
    "analyzer":"my_standard",
    "field":"stakeholderName",
    "text": "test't"
}

Ответ был:

{
    "tokens": [
        {
            "token": "test't",
            "start_offset": 0,
            "end_offset": 6,
            "type": "<ALPHANUM>",
            "position": 0
        }
    ]
}

Я надеялся, что возвращенный токен будет "testt"

1 Ответ

1 голос
/ 22 мая 2019

При повторном создании индекса недостаточно указать новый анализатор в настройке.

Вы также должны указать в отображении, какие поля используют какой анализатор, например:

   "mappings":{
       "properties":{
          "stakeholderName": {
             "type":"text",
             "analyzer":"my_analyzer", 
         },
      }
   }

Ваше отображение (вероятно) выглядит следующим образом:

   "mappings":{
       "properties":{
          "stakeholderName": {
             "type":"text",
         },
      }
   }

В основном, если вы снова запустите свой тест "анализ" и сбросите поле:

{
    "analyzer":"my_standard",
    "text": "test't"
}

Вы будетеget:

{
  "token": "testt",
  "start_offset": 0,
  "end_offset": 6,
  "type": "<ALPHANUM>",
  "position": 0
}

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

...