Mysql поиск 2 столбца и порядок более актуальным

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

Идеально будет вернуть все результаты, которые соответствуют точному термину, а затем выполнить поиск по более релевантному результату, такому как «Лента новостей в Facebook» и т. Д.

Вот код, который я сделал до сих пор:

"p.Title,p.ID,p.Publish_Date, p.Sponsored, p.Featured, p.Seo_Link, p.Content,
(SELECT GROUP_CONCAT(t.Tag_ID)
FROM Tag_Post_Relationship t
WHERE p.ID  =  t.Post_ID) AS Tags,
MATCH (Title, Content) AGAINST ('".$search_term."'IN BOOLEAN MODE) AS Relevance FROM Posts p WHERE NOT Post_Type = 'p'   AND Publish_Date < '{$dateNow}'   AND Visibility = 'p' AND
(MATCH (p.Title, p.Content) AGAINST ('".$search_term."' IN BOOLEAN MODE))

ORDER BY Relevance DESC"

1

Решение

Чтобы сделать это эффективно в базе данных SQL, вам нужно реализовать алгоритм нечеткого сравнения текста, такой как расстояние Левенштейна, в качестве функции или процедуры, которую вы можете вызвать. Это позволит вам ранжировать ваши статьи в зависимости от того, насколько близко они соответствуют вашему поисковому запросу. Пример расстояния Левенштейна в SQL приведен здесь: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=66781.

Вы используете алгоритм в хранимой процедуре, которая выполняется при запросе поиска. Хранимая процедура сравнивает поисковый термин с каждым заголовком и статьей и упорядочивает результаты по ближайшему совпадению, которое будет равно 1 для точного соответствия.

Помимо SQL существуют также многочисленные пакеты для расширенного анализа текста, которые можно использовать на уровне API. Я использовал Python’s Jellyfish и NLTK библиотеки с хорошими результатами.

Другой вариант — использовать что-то вроде Apache Solr (http://lucene.apache.org/solr/features.html) или Elastic Search, который предоставляет готовый API для полнотекстового поиска по документам и данным. Это добавит сложности вашей архитектуре.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]