Вам нужно создать свой собственный пользовательский анализатор , который генерирует токен в соответствии с вашими требованиями, для вашего примера я создал пользовательский анализатор ниже с именем текстового поля language
и проиндексировал некоторые примеры документов:
Создание индекса с помощью пользовательского анализатора
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"char_filter": [
"replace_comma"
]
}
},
"char_filter": {
"replace_comma": {
"type": "mapping",
"mappings": [
", => \\u0020"
]
}
}
}
},
"mappings": {
"properties": {
"language": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
Токены, сгенерированные для текста, такого как c++
, c#
и c,java
.
POST http: // {{{ hostname}}: {{port}} / {{index}} / _ анализ
{
"text" : "c#",
"analyzer": "my_analyzer"
}
{
"tokens": [
{
"token": "c#",
"start_offset": 0,
"end_offset": 2,
"type": "word",
"position": 0
}
]
}
для c,java
он сгенерировал 2 отдельных токена c
и java
, заменив ,
пробелами показано ниже:
{
"text" : "c, java",
"analyzer":"my_analyzer"
}
{
"tokens": [
{
"token": "c",
"start_offset": 0,
"end_offset": 1,
"type": "word",
"position": 0
},
{
"token": "java",
"start_offset": 3,
"end_offset": 7,
"type": "word",
"position": 1
}
]
}
Примечание. Вам необходимо понять процесс анализа и, соответственно, изменить свой анализатор, чтобы он работал во всех случаях использования. Мой пример может не сработать. работать для всех ваших крайних случаев, но надеюсь, что вы получите представление о том, как справиться с такими требованиями.