Я реализую функцию поиска для REST API, и я впервые имею дело с поиском в большой базе данных.
Моя таблица расположения MySQL имеет следующие столбцы
| id | name | email | phone | postcode | address | verified |
Пользователь может искать местоположение по name, email, phone, postcode or address
,
Входная поисковая строка не разделяет различные поля, т. Е. Имеется только одно входное текстовое поле, и эта строка сопоставляется с каждым из указанных выше полей для поиска (это намеренно требуется).
То, что я делал до сих пор, это взятие входной строки и выполнение запроса MATCH … AGAINST для каждого столбца с возможностью поиска, слияние результатов и возврат.
Тем не менее, я бы не стал создавать индексированную таблицу поддержки (location_query
), который имеет две колонки.
| location_id | match_query |
и когда Location добавлен, я могу добавить новую строку в location_query, которая имеет значение как
0 | {NAME} {EMAIL} {PHONE} {POSTCODE} {ADDRESS}
а затем просто запустить поиск FULLTEXT по столбцу match_query?
Может ли это работать?
Вы не предоставили никаких сведений о требованиях к производительности, количестве данных и текущей загрузке пользователей, но я предложил использовать поисковую систему (например, Apache Solr) вместо RDBMS.
Это позволяет точно контролировать стратегии индексации и поиска, а также повысить производительность.
Других решений пока нет …