Простой поиск в MySql - PullRequest
       28

Простой поиск в MySql

0 голосов
/ 03 октября 2010

Я пытаюсь создать базовую функциональность поиска для MySQL InnoDB. Я знаю, что есть полнотекстовый поиск, но я просто хочу пока сделать легкое и простое решение. Я хочу, чтобы при поиске, например, «BMW Car», я хотел найти результаты не только «BMW Car», но также «Car BMW», «BMW Z4 Car» и так далее. этот? Как бы вы реализовали такой поиск?

Прямо сейчас я использую LIKE:

SELECT title,id FROM table WHERE title LIKE '%BMW Car%'

Но это не даст мне таких результатов, как "Автомобиль BMW", "Автомобиль BMW Z4" ..

Ответы [ 4 ]

1 голос
/ 03 октября 2010

Вы можете работать с двумя LIKE:

SELECT title,id FROM table WHERE title LIKE '%BMW%' AND title LIKE '%Car%'

Если не было необходимости изменять конфигурацию сервера на , уменьшите минимальный размер ключевого слова с 4 до 3, чтобы соответствоватьBMW, я бы сказал, что вам будет лучше с полнотекстовым поиском в логическом режиме с самого начала.Это гораздо более гибко:

SELECT title,id FROM table WHERE MATCH (title)
AGAINST ('+BMW +Car -Volvo' IN BOOLEAN MODE);

Полнотекстовый поиск также может искать фразы:

SELECT title,id FROM table WHERE MATCH (title)
AGAINST ('+"BMW Z4" -"BMW Z3"' IN BOOLEAN MODE);
0 голосов
/ 03 октября 2010

Вы должны изучить возможность использования Lucene для поиска. Все его существование вращается вокруг поиска документов. Вы получите обратно идентификатор документа (который будет представлять ваши таблицы PK), а затем выберете из БД, используя это.

0 голосов
/ 03 октября 2010

Это займет некоторую предварительную обработку, чтобы разбить пользовательский ввод на слова.В php вы можете сделать:

$sql = "SELECT title,id FROM table WHERE " ;
$or = "" ;
$inputs = explode(" ", $_GET['q']) ;
foreach($inputs as $input) {
    if(trim($input)=="") continue ;
    $sql .= $or."title LIKE '%".sprintf("%s", mysql_real_escape_string($input))."%' " ;
    $or = "OR " ;
}
$result = mysql_query($sql) ;
0 голосов
/ 03 октября 2010

Посмотрите на логические операторы в MySQL: http://dev.mysql.com/doc/refman/5.1/en/logical-operators.html

# Title must contain either "bmw" or "car"
SELECT title, id FROM table WHERE title LIKE '%bmw%' OR title LIKE '%car%'

#Title must contain both "bmw" and "car"
SELECT title, id FROM table WHERE title LIKE '%bmw%' AND title LIKE '%car%'
...