Допустим, ваш ввод такой:
/mnt/qfs-X/Asset_Management/XG_Marketing_/Episodic-SG_1001_1233.jpg
Что я собираюсь сделать, так это преобразовать все эти forward slash
и underscore
в whitespaces
Таким образом, ваш вклад выглядел бы теперь как
mnt qfs-X Asset_Management XG Marketing Episodic-SG 1001 1233.jpg
Использование токенайзера standard
вместе с token_filter(standard and lowercase)
ниже будет списком слов, которые вы, наконец, будете иметь, которые в конечном итоге будут сохранены в вашем инвертированном индексе и которые могут быть запрошены.
mnt qfs X asset management xg marketing episodic sg 1001 1233 jpg
Ниже приведен пример сопоставления и запроса для вышеупомянутого:
Отображение
PUT mysampleindex
{
"settings":{
"analysis":{
"analyzer":{
"my_analyzer":{
"tokenizer":"standard",
"char_filter":[
"my_char_filter"
],
"filter":[
"standard",
"lowercase"
]
}
},
"char_filter":{
"my_char_filter":{
"type":"pattern_replace",
"pattern":"\\/|_",
"replacement":" "
}
}
}
},
"mappings":{
"mydocs":{
"properties":{
"mytext":{
"type":"text",
"analyzer":"my_analyzer"
}
}
}
}
}
Образец документа
POST mysampleindex/mydocs/1
{
"mytext": "nt/qfs-X/Asset_Management/XG_Marketing_/Episodic-SG_1001_1233.jpg"
}
Пример запроса
POST mysampleindex/_search
{
"query":{
"match":{
"mytext":"qfs episodic sg 1001 jpg"
}
}
}
Имейте в виду, что когда вы отправляете вышеуказанный запрос в Elasticsearch, Elasticsearch будет принимать входные данные и применять там также Анализ времени поиска . Я бы посоветовал вам прочитать эту ссылку для получения дополнительной информации об этом, и именно поэтому вы получите документ даже с приведенной ниже строкой запроса.
"mytext": "QFS EPISODIC SG 1001 jpg"
Теперь, если вы попытаетесь выполнить поиск, используя pisodic
(e pisodic ), то есть приведенный ниже запрос в качестве примера, поиск ничего не даст, потому что ваш инвертированный индекс не сохраняет слова в этом мода. Для таких сценариев я бы предложил вам использовать N-Gram Tokenizer , чтобы episodic
дополнительно создавал такие слова, как episodi, pisodic
, которые сохранялись бы в инвертированном индексе.
POST mysampleindex/_search
{
"query":{
"match":{
"mytext":"pisodic"
}
}
}
Также обратите внимание, что я использовал text
, а не keyword
тип данных.
Надеюсь, это поможет!