Вам необходимо создать собственный анализатор, который использует char filter, чтобы заменить .
на space
.
Ниже приведены настройки для создания вышеупомянутого анализатора. Вы можете использовать API analyze, чтобы проверить это. .
{
"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
, он появится в результатах поиска.
Дайте мне знать, если вам нужна помощь в понимании этого.
EDIT: – Несколько ссылок для понимания процесса анализа https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html
person
user156327
schedule
14.06.2019