Полнотекстовый поиск из базы данных

0

Предположим, у меня есть база данных MySQL с именем DB и таблица с именем ContactInfo. Ниже приведена его структура и некоторые примеры данных (всего один элемент):

Таблица ---- ContactInfo:


-----------------------------------------------------------
name  fullname                                       phone
-----------------------------------------------------------
NASA  National Aeronautics and Space Administration  00000
-----------------------------------------------------------

Теперь я хочу искать данные в таблице "ContactInfo" следующим образом:

1) Независимо от того, что я вхожу в "НАСА" или "Национальное управление по аэронавтике и исследованию космического пространства" или номер телефона, мне следует вернуть правильную линию (в этой строке, только в первой строке).

2) Когда я вхожу в "Национальную администрацию по аэронавтике" или "Национальное космическое управление" или "Американское управление по аэронавтике и исследованию космического пространства" или "Американское НАСА", которое не имеет точного соответствия в базе данных, но первая строка должна быть возвращена для меня, поскольку содержимое в первой строке связано с запрошенной строкой.

Мало двух можно рассматривать как неясный поиск.

Я решил использовать "Полный контекстный поиск", такой как "Hpyer estraier" и "Lucene". Однако я обнаружил, что мое требование отличается более или менее.

При использовании "Hyper estraier" или "Lucene" индексы должны быть построены сначала в соответствии с разобранным простым текстом. Затем начните поиск.

Значит ли это, что я должен изменить данные в моей базе данных на несколько текстовых файлов (каждая запись в таблице на один файл), а затем построить индекс в соответствии с этими файлами?

Кстати, я просто нашел, что MySQL поддерживает полнотекстовый поиск, однако мы должны обрабатывать некоторые китайские символы, но кажется, что mysql отлично поддерживает полнотекстовый поиск китайских символов.

Итак, кто-нибудь может дать мне предложение?

Теги:
database
full-text-search

2 ответа

0
Лучший ответ

Вы можете использовать sphinx в сочетании с mysql. sphinx является автономным инструментом, но он имеет режим прокси-сервера mysql, где он в основном ведет себя как сервер mysql и может быть запрошен с помощью любого соединителя mysql. Или, в качестве альтернативы, есть плагин для модулей памяти sphinx для mysql, который позволяет вам запрашивать sphinx с вашим текущим подключением mysql и выполнять соединение с другими таблицами.

Дефинитивно не критическое и грязное решение, но стоит посмотреть дальше: http://sphinxsearch.com/

  • 0
    Кажется, что sphinx поддерживает только php, но наше приложение построено на java. И я нахожу другой sphinx-4, в чем отличие?
  • 0
    Java не требует встроенной поддержки sphinx. Вы можете использовать SphinxSE SE = Storage Engine sphinxsearch.com/docs/current.html#sphinxse-using или SphinxQL sphinxsearch.com/docs/current.html#sphinxql, который является демоном, который подделывает настоящий сервер MySQL и позволяет вам выполнять запросы. Оба метода требуют, чтобы демон sphinx был запущен и работал. SphinxQL проще в настройке, потому что SphinxSE требует, чтобы вы перекомпилировали MySQL с поддержкой sphinx, но SphinxSE удобнее запрашивать, поскольку вы можете запрашивать product_id из поиска sphinx и напрямую присоединяться к таблице продукта за один шаг.
0

Вы можете использовать что-то вроде этого для этой цели:

SELECT *
  FROM `ContactInfo`
 WHERE `name` LIKE '%your-query%'
    OR `fullname` LIKE '%your-query%'
    OR `phone` LIKE '%your-query%'

Чтобы поддержать ваш случай №2, вам нужно заменить все пробелы в your-query на % -characters, чтобы разрешить любую комбинацию символов между введенными словами. Не забудьте избежать ввода пользователей, чтобы предотвратить инъекцию SQL.

И все ваши данные в (отдельные) текстовые файлы кажутся очень неформальными для хранения данных.

  • 0
    Для случая № 2 ваше предложение работает для английского символа, но, похоже, не для китайских символов. Поскольку английские слова начинаются и заканчиваются пробелом, а китайское слово - нет.
  • 0
    Вы можете создать это, используя регулярные выражения с сокращением границы слова ( \b ), как описано здесь .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню