У меня возникают проблемы с правильным выражением регулярного выражения для фильтра регулярных выражений ElasticSearch. Я пытаюсь сопоставить что-либо в «info-for/media» в поле url, например. http://mydomain.co.uk/info-for/media/press-release-1. Чтобы попробовать правильное выражение, я использую сейчас match_all
, но в итоге это будет match_phrase
с строкой запроса пользователя.ElasticSearch Regexp Filter
POST для локального хоста: 9200/_search
{
"query" : {
"match_all" : { },
"filtered" : {
"filter" : {
"regexp": {
"url":".*info-for/media.*"
}
}
}
},
}
Это возвращает 0 хиты, но разобрать правильно. .*info.*
действительно получает результаты, содержащие URL-адрес, но, к сожалению, слишком широк, например. сопоставляя любые URL-адреса, содержащие «информацию». Как только я добавлю дефис в «info-for», я снова получаю 0 результатов. Независимо от того, какую комбинацию escape-символов я пытаюсь, я либо получаю исключение синтаксического анализа, либо нет совпадений. Может ли кто-нибудь помочь объяснить, что я делаю неправильно?
Простейший вариант состоит в том, чтобы сопоставить это поле как многополюсное поле с неанализируемой версией и запустить фильтр регулярных выражений в поле, которое не было проанализировано. В общем, регулярный фильтр имеет больше смысла в неаналитическом поле. –
Это будет очень дорогостоящий запрос. –
Спасибо @AlexBrasetvik У меня возникли трудности с отправкой версии JSON конфигурации отображения/анализатора в конечную точку index_settings. Он не может найти анализатор, который я объявил. Образец JSON был бы действительно полезен, если бы у вас его было, спасибо. – idlemind