Полнотекстовый поиск по таблицам InnoDB - PullRequest
3 голосов
/ 23 сентября 2010

Мне нужно использовать полнотекстовый поиск, но таблицы, которые я использую в своем веб-приложении, используют механизм INNODB, из того, что я прочитал, JDBC не поддерживает триггеры Mysql, и я должен развернуть проект на сервере курса поэтому установка таких инструментов, как sphinxs, невозможна, может кто-нибудь предложить метод для выполнения полнотекстового поиска?

спасибо

Редактировать: в проекте требуется наличие согласованной базы данных, таблица, по которой я хочу выполнить поиск, содержит список инструментов, которые существуют в лаборатории, для которой я создаю веб-приложение, можно вставить новые инструменты для этого, но давайте предположим, что доступы к вставке немногочисленны и что в основном таблица будет использоваться для доступа для чтения, в этом случае использование MyIsam оправдано и будет ли это соответствовать требованиям согласованности (Myisam не поддерживает транзакции)

1 Ответ

3 голосов
/ 23 сентября 2010

Вы можете создать вторую таблицу, используя MyISAM, которая содержит только первичный ключ основной таблицы и текстовое содержимое, которое вы хотите FULLTEXT найти.Затем, когда вы хотите выполнить полнотекстовый поиск, вы делаете JOIN между соответствующей таблицей InnoDB и таблицей MyISAM с поисковой приманкой, с условием MATCH для таблицы MyISAM.

Это также позволяетВы должны хранить различный текст поисковой приманки в таблице MyISAM по сравнению с «реальным» текстом в таблице InnoDB, что позволяет реализовывать такие функции, как использование стволов или специальная обработка апострофов / дефисов, которыми не может управлять движок FULLTEXT MySQL.

Проблема здесь, конечно, заключается в том, чтобы данные MyISAM соответствовали данным InnoDB.Вы можете запускать задание время от времени, чтобы выполнить его, или заставить приложение записывать в обе таблицы каждый раз, когда происходит обновление текста.В любом случае, мы надеемся, что вы можете избежать несогласованности в полнотекстовом поиске, где это было бы неприемлемо для «канонических» табличных данных.

Другой подход - просто вернуться к LIKE / RLIKE (regexp) соответствие, когда нужное вам полнотекстовое решение недоступно.Будет неиндексированным, поэтому не быстро, но, по крайней мере, он всегда будет работать, и это хорошо для небольших баз данных.

Редактировать:

таблица, по которой я хочу выполнить поиск, содержитсписок инструментов, которые существуют в лаборатории, для которой я создаю веб-приложение

ОК, действительно ли это должно быть FULLTEXT для поиска?Разве не было бы лучше смоделировать такой список как одну сущность для каждого типа оборудования и таблицу соединений между лабораториями и оборудованием (или чем-то еще)?

, так что если 2 вставки произойдут нав то же время?

MyISAM не позволит двум INSERT запрашивать один и тот же первичный ключ.Но этого недостаточно, чтобы гарантировать «последовательность» в общем случае.Хотя это звучит так, как будто вы можете сойти с рук с практической точки зрения, если существует явное требование «согласованности», это, вероятно, именно то, что они не хотят, чтобы вы делали.

...