ElasticSearch: NGram с амперсандом, Plus, Power

Моя конфигурация поиска пока работает хорошо, но я не могу понять, как заставить NGram Tokenizer искать такие символы, как &, +, ² и т. д.

Когда я использую «стандартный» токенизатор, он ищет символы и дает правильные результаты. Поэтому я думаю, что мое сопоставление с токенизатором NGram неверно.

Вот моя конфигурация отображения:

"settings": {
    "number_of_shards": 4,
    "analysis": {
        "tokenizer": {
            "ngram_tokenizer": {
                "type": "nGram",
                "min_gram": "1",
                "max_gram": "20",
                "token_chars": [
                    "letter",
                    "digit",
                    "punctuation",
                    "symbol"
                ]
            }
        },
        "filter": {
            "autocomplete_filter": {
                "type": "edge_ngram",
                "min_gram": 1,
                "max_gram": 20
            },
            "whitespace_remove": {
                "type": "pattern_replace",
                "pattern": " ",
                "replacement": ""
            }
        },
        "analyzer": {
            "autocomplete": {
                "type": "custom",
                "tokenizer": "ngram_tokenizer",
                "filter": [
                    "lowercase",
                    "autocomplete_filter"
                ]
            },
            "concat_analyzer": {
                "filter": [
                    "lowercase",
                    "whitespace_remove",
                    "nGram"
                ],
                "type": "custom",
                "tokenizer": "keyword"
            },
            "analyzer_firstletter": {
                "filter": "lowercase",
                "tokenizer": "keyword"
            }
        }
    }

и мое отображение:

"mappings": {
    "devicemodel": {
        "_timestamp": {
            "enabled": true,
            "store": "yes"
        },
        "_id": {
            "path": "id"
        },
        "properties": {
            "id": {
                "store": "yes",
                "type": "string"
            },
            "devicemodelID": {
                "store": "yes",
                "type": "string"
            },
            "devicemodelcode": {
                "store": "yes",
                "type": "string",
                "index_analyzer": "autocomplete",
                "search_analyzer": "standard",
                "search_quote_analyzer": "autocomplete",
                "term_vector": "with_positions_offsets",
                "fields": {
                    "firstletter": {
                        "analyzer": "analyzer_firstletter",
                        "type": "string"
                    }
                }
            },
            "devicemodel": {
                "store": "yes",
                "type": "string",
                "index_analyzer": "autocomplete",
                "search_analyzer": "standard",
                "search_quote_analyzer": "autocomplete",
                "term_vector": "with_positions_offsets",
                "fields": {
                    "concat": {
                        "type": "string",
                        "index_analyzer": "concat_analyzer",
                        "search_analyzer": "standard"
                    }
                }
            },

person sanyooh    schedule 08.03.2016    source источник
comment
Взгляните сюда, надеюсь, это поможет stackoverflow.com/a/35736361/4043593 вам просто нужен настраиваемый фильтр разделителя слов   -  person Waldemar Neto    schedule 09.03.2016
comment
@WaldemarNeto: спасибо за совет. он работает, но затем он смешивает другие части поиска, которые уже работали. очень расстраивает, но все равно спасибо :) не знал о возможности добавления 'type_table'   -  person sanyooh    schedule 09.03.2016