Вы можете создать вторую таблицу с использованием MyISAM, которая содержит только первичный ключ основной таблицы и текстовый контент, который вы хотите найти FULLTEXT
. Затем, когда вы хотите выполнить полнотекстовый поиск, вы делаете JOIN
между соответствующей таблицей InnoDB и таблицей MyISAM поисковой приманки с условием MATCH
против таблицы MyISAM.
Это также позволяет хранить различный текст поисковой строки в таблице MyISAM в «реальном» тексте в таблице InnoDB, что позволяет реализовать такие функции, как остановка или специальная обработка апострофа/дефиса, которые MySQL FULLTEXT
не может управлять.
Проблема здесь заключается в том, что данные MyISAM совместимы с данными InnoDB. Вы можете запускать задание так часто, чтобы сделать это, или сделать приложение записывать в обе таблицы в любое время, когда есть текстовое обновление. В любом случае, надеюсь, вы сможете избежать несогласованности в полнотекстовом поиске, где это было бы неприемлемо для «канонических» табличных данных.
Другой подход заключается в том, чтобы вернуться обратно к LIKE
/RLIKE
(regexp), если полнотекстовое решение, которое вы хотите, недоступно. Будет непроницаемым, поэтому не быстро, но, по крайней мере, он всегда будет работать, и это нормально для небольших баз данных.
Edit:
стол, на котором я хочу, чтобы выполнить поиск содержит перечень документов, которые существуют в лаборатории, для которых я строю веб-приложение
ОК, делает это на самом деле должны быть FULLTEXT
подлежит поиску? Разве не лучше было бы моделировать такой список, как один объект для каждого типа оборудования, и таблицу соединений между лабораториями и оборудованием (или что бы это ни было)?
, так что если в то же время происходит 2 вставок?
MyISAM не позволит двум INSERT
претендовать на тот же первичный ключ. Но этого недостаточно, чтобы гарантировать «согласованность» в общем случае. Хотя это звучит так, будто вы могли бы избежать этого с практической точки зрения, если есть явное требование «согласованности», это, вероятно, именно то, что они не хотят делать.
Да, они предположили, что мы используем поиск FULLTEXT, потому что у каждого инструмента есть также поле описания, и это то, где нам нужно выполнить поиск. – Noona
Я думаю, что я последую этому предложению: «Вы можете создать вторую таблицу с помощью MyISAM, которая содержит только первичный ключ основной таблицы и текстовый контент, который вы хотите найти в FULLTEXT. Затем, когда вы хотите выполнять поиск по полному тексту, вы делаете JOIN между соответствующей таблицей InnoDB и таблицей MyISAM поисковой приманки с условием MATCH против таблицы MyISAM. " – Noona
Я думаю, что это не большая проблема, если я вернул тип для инструмента, которого нет в лаборатории, так как это то, что мы должны возвращать в поисковом выражении. – Noona