Как выполнять запросы, начинающиеся и заканчивающиеся, в поиске Redis
Можно ли найти документы, которые начинаются или заканчиваются определенным выражением?
Например, если мы будем искать с помощью этой команды:
FT.SEARCH "our.domain.DocumentIdx" "bar*"
Он вернет такие документы, как: « foo bar », « foo bar baz », « bar baz ».
Но я не мог сузить круг поиска настолько, чтобы получить только « бар баз ».
1 ответ
Полнотекстовый поиск в Redis не работает таким образом. Вы можете искать только термины внутри документа. Подстановочные знаки для этих терминов по-прежнему ищут вхождения этого термина, но только те, которые соответствуют подстановочным знакам.
Так, например, если вы ищете , это будет соответствовать таким терминам, какbar
,barbarian
, иbarrister
. Он будет соответствовать им везде, где они встречаются в документе.
Вы можете использовать ТЭГИ вместо ТЕКСТА в Redis, если хотите искать точные значения в определенных местах строки. Это будет работать для вашего простого примера выше. Но имейте в виду, что он будет анализировать запятые и рассматривать их как отдельные значения в этом TAG.
Так, например, если у вас есть строкаbar baz qux
и искал наbar*
это будет работать нормально, и поиск ничего не даст. Чего и следовало ожидать. Но если бы у вас была строкаbar,baz,qux
он будет искать каждый TAG отдельно и искать поqux*
будет соответствовать и возвращаться.
Когда вы создаете индекс для TAG, вы можете переопределить символ, используемый для анализа элементов TAG. Я обычно использую|
вместо.
Кроме того, вы можете индексировать одно и то же поле дважды. Таким образом, вы можете индексировать свое поле как поле TEXT и поле TAG. Это позволяет вам искать по нему больше способов, хотя ваш индекс, конечно, будет больше.
Учитывая все вышесказанное, индексирование больших фрагментов удобочитаемого текста в виде TAG, вероятно, приведет к созданию больших индексов. Может быть проблема. Может не. Все зависит от масштаба и необходимости. Итак, подойдите к этому с открытыми глазами.