создание поиска конкретной таблицы

У меня есть поле искомого текста, которое ищет конкретный столбец в таблице, но результаты не состоят в том, как я ожидал.

Когда пользователь пытается искать как "привет мир, как", он не найдет результат как я, запрос похож '%hello на мир как %'. Строка таблицы содержит строку "привет мир".

Как я делаю надлежащий поиск с помощью php и mysql, и что, если я должен сделать поиск на нескольких таблицах / все столбцы в таблице? Который является лучшим способом сделать это?

1
задан Charles 15 July 2010 в 15:24
поделиться

1 ответ

Один плохой способ сделать это - разделить поисковый текст пользователя на пробелы. «привет, мир, как» превратится в «привет, мир% как». Тем не менее, это по-прежнему требует наличия слова «как» после «hello world» и не гарантирует, что «hello» и «world» находятся рядом друг с другом.

Кроме того, даже если вы поместили индекс в столбец, в котором выполняется поиск, предложение LIKE, помеченное символом подстановки (%) , не может использовать этот индекс в MySQL. Это означает, что каждый поиск будет полным сканированием таблицы. Это может происходить довольно медленно.

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

Sphinx - еще один доступный вам вариант. Это сторонняя поисковая система, которую можно подключить к MySQL и PHP.

Однако все эти ответы сосредоточены на поиске по одному столбцу за раз. Если вам нужно искать по целым строкам, это становится немного интереснее. Возможно, вы захотите рассмотреть систему поиска на основе «документов», например ElasticSearch .

2
ответ дан 2 September 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: