ElasticSearch ищет дефисный текст с пробелом вместо тире в запросе

У меня есть проиндексированные данные (человек) с firstName = "Jean-Marc", и я хотел бы иметь возможность найти этого человека, используя комбинацию разных запросов, например, для firstName "Jean-Marc" должна быть возможность поиска с: «Жан-Марк» и «Жан Марк» (с пробелом или тире)

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

  "firstName": {
    "type": "keyword",
    "normalizer": "keyword_normalizer",
    "fields": {
      "analysed": {
        "type": "text",
        "analyzer": "hyphen_analyzer",
        "search_analyzer": "standard",
        "fielddata": true
      }
    }
  }

И настройка:

"char_filter": {
    "allowOnlyChar": {
        "pattern": "[^A-Za-z]",
        "type": "pattern_replace",
        "replacement": " "
    }
}

"analyzer": {
    "hyphen_analyzers": {
        "filter": "lowercase",
        "char_filter": [
            "allowOnlyChar"
        ],
        "type": "custom",
        "tokenizer": "standard"
    }
}

Я получаю человека, когда я держу тире, но нет результата с запросом пробела

Я использую эластик 6.2.4


person Rachid Ennaj    schedule 06.02.2019    source источник


Ответы (1)


Определите свой анализатор:

"char_filter": {
    "allowOnlyChar": {
        "pattern": "[^A-Za-z]",
        "type": "pattern_replace",
        "replacement": " "
    }
}

"analyzer": {
    "yourAnalyzer": {
        "filter": "lowercase",
        "char_filter": [
            "allowOnlyChar"
        ],
        "type": "custom",
        "tokenizer": "standard"
    }
}

И, конечно же, проиндексируйте свои документы с помощью этого анализатора. "анализатор": "вашАнализатор"

ссылка на документ: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-replace-charfilter.html

person LeBigCat    schedule 06.02.2019
comment
Спасибо за вашу помощь, кажется, ваше предложение не работает, когда я использую тип ключевого слова, я обновляю вопрос с помощью глобальной конфигурации - person Rachid Ennaj; 07.02.2019
comment
О, мой плохой, не видел ключевое слово в сопоставлениях. Однако вы также можете настроить анализатор на ключевое слово, довольно похоже: elastic.co/guide/en/elasticsearch/reference/current/ - person LeBigCat; 07.02.2019
comment
Спасибо за ваш ответ. Изменение моего токенизатора на ключевое слово работает нормально - person Rachid Ennaj; 11.02.2019