Как соответствовать и отсортировать по подобию в MySQL?

В настоящее время я делаю поисковую функцию. Позволяет говорят в моей базе данных, у меня есть эти данные:

  • Keyword1
  • Keyword2
  • Keyword3
  • Keysomething
  • Ключ

и вводимый пользователь: "Ключ" как ключевое слово для поиска. Это - мой текущий запрос:

SELECT * FROM data WHERE (
  data_string LIKE '$key%' OR 
  data_string LIKE '%$key%' OR
  data_string LIKE '%$key'
)

В основном у меня есть 2 вопроса:

  1. Как я сортирую по (порядок) подобие. От вышеупомянутого примера я хотел "Ключ" как свой первый результат. Мой текущий результат: Keyword1, Keyword2, Keyword3, Keysomething и Key

  2. Мой SQL-запрос только ищет "data_string" столбцом, что, если я хочу к seach столбцу других? Сделайте я должен сделать что-то вроде этого:

SELECT * FROM data WHERE (
  data_string LIKE '$key%' OR
  data_string LIKE '%$key%' OR
  data_string LIKE '%$key'
) OR (
  data_other LIKE '$key%' OR
  data_other LIKE '%$key%' OR
  data_other LIKE '%$key'
) -- ...

Есть ли какой-либо лучший/быстрее запрос, чем Q2?

5
задан Salman A 18 February 2015 в 08:24
поделиться

1 ответ

Я не уверен, что LIKE - правильный способ сделать это. Если вам необходимо выполнить поиск в тексте по ключевым словам и отсортировать результаты по показателю релевантности, вы должны использовать полнотекстовый индекс MySQL и функции полнотекстового поиска MySQL . Извините, если это уводит вас от того, что вы на самом деле пытаетесь сделать, но я все же рекомендую взглянуть на это. Некоторые цитаты из справочного руководства MySQL:

1) Как создать полнотекстовый индекс для нескольких столбцов таблицы

mysql> CREATE TABLE articles (
    ->   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   title VARCHAR(200),
    ->   body TEXT,
    ->   FULLTEXT (title,body)
    -> );

2) Примеры данных

 mysql> INSERT INTO article (title, body) VALUES
 -> ('MySQL Tutorial', 'DBMS означает DataBase ...'),
 -> ('Как правильно использовать MySQL', 'После того, как вы прошли через ...'),
 -> ('Оптимизация MySQL', 'В этом руководстве мы покажем ...'),
 -> ('1001 трюк MySQL', '1. Никогда не запускайте mysqld от имени пользователя root. 2. ...'),
 -> ('MySQL против YourSQL', 'В следующем сравнении баз данных ...'),
 -> ('Безопасность MySQL', 'При правильной настройке MySQL ...');

3) Пример запроса, который ищет ключевые слова в нескольких столбцах и отображает результат + счет:

 mysql> SELECT id, body, MATCH (title, body) AGAINST
 -> ('Последствия для безопасности запуска MySQL как root') Оценка AS
 -> ИЗ статей, ГДЕ МАТЧ (заголовок, текст) ПРОТИВ
 -> ('Последствия для безопасности запуска MySQL от имени пользователя root');
+ ---- + ------------------------------------- + ------ ----------- +
| id | тело | оценка |
+ ---- + ------------------------------------- + ------ ----------- +
| 4 | 1. Никогда не запускайте mysqld от имени пользователя root. 2. ... | 1.5219271183014 |
| 6 | При правильной настройке MySQL ... | 1.3114095926285 |
+ ---- + ------------------------------------- + ------ ----------- +
6
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

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