Я создаю веб-сайт с разделом статей. Я ищу функцию поиска, которая будет искать в заголовке статьи и в содержимом статьи результаты, содержащие весь поисковый запрос, а затем вернет результат статьи, содержащий слова поискового запроса, такие как следующие пример:
Искать термин: «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"
Чтобы сделать это эффективно в базе данных 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 для полнотекстового поиска по документам и данным. Это добавит сложности вашей архитектуре.
Других решений пока нет …