Вам необходимо создать собственный анализатор, который использует символ фильтра для замены .
на space
.
Ниже приведена настройка для создания вышеуказанного анализатора. Вы можете использовать анализ API для проверки этого.
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"replace_dots"
]
}
},
"char_filter": {
"replace_dots": {
"type": "mapping",
"mappings": [
". => \\u0020"
]
}
}
}
}
}
Этот анализатор создаст токены ниже для поля, содержащего testsite.com
{
"tokens": [
{
"token": "testsite",
"start_offset": 0,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "com",
"start_offset": 9,
"end_offset": 12,
"type": "<ALPHANUM>",
"position": 1
}
]
}
Теперь вам нужно использовать запрос match
в том же поле, так как запрос на совпадение анализируется и использует тот же анализатор, поэтому для текста поиска localhost.testsite.com
будут сгенерированы ниже токены.
{
"tokens": [
{
"token": "localhost",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "testsite",
"start_offset": 10,
"end_offset": 18,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "com",
"start_offset": 19,
"end_offset": 22,
"type": "<ALPHANUM>",
"position": 2
}
]
}
Теперь, когда ваш документ содержит токены testsite
и com
, он появится в результатах поиска.
Дайте мне знать, если вам нужна помощь в понимании этого.
РЕДАКТИРОВАТЬ: - Некоторые ссылки для понимания процесса анализа https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html