Найти слово в тексте в MySQL - PullRequest
1 голос
/ 29 октября 2011

До публикации я много искал, но не нашел, что именно искал.Вопрос довольно простой.

У меня есть текст в таблице (база данных MySql ), который должен использовать InnoDB engine (поэтому я не могу использовать ПОЛНЫЙ ТЕКСТ поиск , который требует MyIsam в качестве движка).Моя цель - найти слово в тексте .Слово, как вы можете легко догадаться, может быть окружено пробелом, табуляцией, метками и т. Д. И может быть в начале, в середине или в конце этого текста.

Я знаю, что могуиспользуйте оператор REGEXP и на самом деле я его использую, но сделанное мной заявление SQL не совсем то, что мне нужно, поэтому я решил опубликовать вопрос.Это мой настоящий SQL:

SELECT *
FROM table
WHERE field REGEXP '[[:space:][:graph:]]+THEWORD[[:space:][:graph:]]+'

Как мне достичь своей цели?

Спасибо всем.

Ответы [ 3 ]

2 голосов
/ 29 октября 2011

Используйте маркеры границы слова:

SELECT *
FROM table
WHERE field REGEXP '[[:<:]]THEWORD[[:>:]]'

(находится в справочнике MySQL 5.1 )

0 голосов
/ 29 октября 2011

Другой альтернативой является индексация слов вне базы данных в индексированной поисковой системе, такой как Lucene. Я знаю, что это не решает ваш вопрос напрямую, но если у вас есть большая база данных, и / или она используется в контексте высокого параллелизма, попытка поиска отдельных слов становится большой проблемой и страдает производительность. Вы можете попытаться проиндексировать слова в другой таблице базы данных, но с этим есть ряд серьезных ограничений. Например, что делать, если вы хотите, чтобы поиск «run» соответствовал «run» или «running»? Что если вы хотите, чтобы поиск "метаданных" соответствовал "метаданным" и "медаданным"? Индексированные поисковые системы имеют такие функции, как основание и синонимы, которые могут повысить мощность и гибкость ваших поисковых возможностей. Не говоря уже о том, что они оптимизированы и кэшированы для поиска, в отличие от запроса.

0 голосов
/ 29 октября 2011

Похоже, вы на самом деле пытаетесь создать механизм для поиска слова в некотором текстовом содержимом. Если вам нужно сделать это несколько раз (например, при каждом поиске запроса на вашем сайте), я предлагаю вам индексировать слова в других таблицах (например, одна таблица для слов, где все они уникальный и одна таблица соединителей между содержимым и словами).

Это значительно ускорит запросы, предназначенные для получения контента с определенными словами. Имейте в виду, однако, что это долгосрочное решение и является лучшей идеей, когда вы хотите выполнять такой поиск много раз, и каждый поиск будет влиять на скорость вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...