Как реализовать Поиск по ключевым словам в MySQL?

token: sessionStorage.getItem('secretKey')}||"" }}

Как насчет использования ||, чтобы убедиться, что токен не является неопределенным?

34
задан Nisse Engström 19 August 2017 в 12:58
поделиться

4 ответа

Для одного ключевого слова в полях VARCHAR вы можете использовать LIKE :

SELECT id, category, location
FROM table
WHERE
(
    category LIKE '%keyword%'
    OR location LIKE '%keyword%'
)

Для описания обычно лучше добавить полнотекстовый индекс и выполнить полнотекстовый поиск (только MyISAM):

SELECT id, description
FROM table
WHERE MATCH (description) AGAINST('keyword1 keyword2')
54
ответ дан 27 November 2019 в 16:22
поделиться
SELECT 
    *
FROM 
    yourtable
WHERE 
    id LIKE '%keyword%' 
    OR position LIKE '%keyword%'
    OR category LIKE '%keyword%'
    OR location LIKE '%keyword%'
    OR description LIKE '%keyword%'
    OR refno LIKE '%keyword%';
7
ответ дан 27 November 2019 в 16:22
поделиться

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

Keyword
Id
Count (possibly)

с индексом по ключевому слову. Создайте триггер вставки / обновления / удаления для другой таблицы, чтобы при изменении строки каждое ключевое слово извлекалось и помещалось (или заменялось) в этой таблице.

Вам также понадобится таблица слов, чтобы не считать как ключевые слова (если и так, но, ...).

Таким образом, вы получите наилучшую скорость для запросов, желающих искать ключевые слова, и сможете (относительно легко) реализовывать более сложные запросы. такие как «содержит Java и RCA1802».

Запросы «LIKE» будут работать, но они также не будут масштабироваться.

6
ответ дан 27 November 2019 в 16:22
поделиться

Лично я бы не использовал сравнение строк LIKE в поле ID или любом другом числовое поле. Поиск по идентификатору № « 216 » не имеет смысла для возврата 16 216 , 216 51, 3 216 087 , 53 216 68 ... и т. Д. И т. П .; Аналогично с заработной платой.

Кроме того, если вы хотите использовать подготовленные операторы для предотвращения SQL-инъекций, вы должны использовать строку запроса, например:

SELECT * FROM job WHERE `position` LIKE CONCAT('%', ? ,'%') OR ...
5
ответ дан 27 November 2019 в 16:22
поделиться
Другие вопросы по тегам:

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