mySQL LIKE / MATCH для получения более точных результатов поиска - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь создать более точную функцию поиска для моего раздела новостей на моем веб-сайте. Я использую LIKE для области содержимого, однако моя проблема в том, что, когда я ищу «три поиска», когда в базе данных он записывается как «поиск трех слов», он не возвращает никакого содержимого.

Мне посоветовали использовать MATCH, но я не могу вернуть ЛЮБЫЕ результаты с ним. Мой запрос возвращает множество полей из нескольких таблиц. В моей области поиска имеется более 1 блока поиска, который я могу изменить при необходимости, но он мне нужен, чтобы возвращать все результаты независимо от того, имеют они низкий балл или нет.

Вот мой SQL:

$sql = "SELECT news.id, news.name, news.date, news_categories.name as catName, news.author, statuses.name as statusName, MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AS score FROM news, news_categories, statuses WHERE news.name LIKE '%".$name."%' AND MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AND news_categories.id LIKE '%".$category."%' AND news.status_id LIKE '%".$status."%' AND news.status_id=statuses.id AND news.category_id=news_categories.id";

Ответы [ 2 ]

0 голосов
/ 25 апреля 2012

Полный текст здесь не совсем помог, так как я требовал всегда получать значения.Для меня более простым и эффективным способом было сделать str_replace для переменной, содержащей поисковый термин, и заменить все "" на%, чтобы этот термин был "% three% word% search%"

0 голосов
/ 26 февраля 2012

Вам нужно будет создать индекс FULLTEXT для полей, которые вы хотите найти. Например:

ALTER TABLE news
  ADD FULLTEXT(name, summary, content, keywords);

Теперь вы можете использовать эти поля в MATCH() ... AGAINST предложении вашего запроса. Прочитайте MySQL документацию о полнотекстовом поиске для получения дополнительной информации.

...