Как выполнять запросы, начинающиеся и заканчивающиеся, в поиске 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, вероятно, приведет к созданию больших индексов. Может быть проблема. Может не. Все зависит от масштаба и необходимости. Итак, подойдите к этому с открытыми глазами.

Другие вопросы по тегам