Предположим, у меня есть индекс с несколькими полями типа text
и одним или несколькими типами date
(некоторого формата, скажем, yyyy/MM/dd
). Если я хочу, чтобы пользователи могли выполнять запросы, используя только одно поле ввода (например, как в Google), как мне go поддерживать поля date
? До сих пор поля text
в основном запрашивались с использованием запросов simple_query_string
и multi_match
.
Теперь simple_query_string
работает нормально, если целое date
в правильном формате поиск. Но если, например, я хочу фильтровать по году, пропущенные поля автоматически заполняются наименьшим допустимым значением (например, для месяцев это 01).
Вот подходы, которые я пробовал до сих пор:
- разделить компоненты поля
date
на год, месяц и c. Это, однако, насколько я могу судить, требует update_by_query
, в то время как иметь это правило во время индекса было бы намного лучше ... - использовать
range
запрос. Однако доступное форматирование не поддерживает уровень свободы, который должен иметь пользовательский ввод (поэтому что-то вроде 2000 <some-name>
не будет принято ... - скопируйте значение как дату в другое поле и примите больше форматов - > так не работает ...
Какие могут быть следующие мои подходы:
- определить анализатор, который разделяет даты по доступным разделителям и индексирует все как текст и запрос в виде текста. Это, вероятно, должно работать, но элегантно это не ...
- изменить конвейер logsta sh, чтобы записать компоненты даты в разные поля. Однако, такое чувство, что это должно быть возможно сделать в самом Elasticsearch ...
Кто-нибудь должен был решить эту специфическую c проблему раньше? Спасибо за предложения!