Как сделать полнотекстовый поисковый движок с php и mysql?

Я создал поисковую систему PHP с использованием открытого исходного кода. Я создал базу данных и таблицу с 5 столбцами:

заглавие, описание, ключевые слова, ссылка на сайт, Дата

Код, который я использую, является кодом php ниже:

<?php
$keywords = $_GET ['input'];
$keywords = "Led Zeppelin";
$words = explode(" ",$keyword);

foreach ($words as $w) {
$keyword_parts .= "+" . $w ." ";
}
$keyword_parts = substr($keyword_parts,0,-1);
$query = "SELECT
*,
MATCH (keywords,title) AGAINST ('" . $keywords . "') as score
FROM search
WHERE MATCH (keywords,title) AGAINST ('" . $keyword_parts . "' IN BOOLEAN MODE)
ORDER BY score DESC";

//connect
mysql_connect ("localhost", "root", "password");
mysql_select_db("intranet");

$query = mysql_query($query);
$numrows = mysql_num_rows ($query);
if($numrows >0){
while ($row = mysql_fetch_assoc($query)){
$id = $row ['id'];
$title = $row ['title'];
$description = $row ['description'];
$keywords = $row ['keywords'];
$link = $row ['link'];
$date = $row ['date'];

echo "<h2><a href='$link'>$title</a><h2/>
$description <br /><br />";
}
}
else
echo "No results found for \"<b>$each</b>\" ";

//disconnect
mysql_close();
?>

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

Сейчас я читал в Интернете о полнотекстовом поиске («Полнотекстовый поиск выполняется с использованием синтаксиса MATCH () … ПРОТИВ. MATCH ()»), но я не знаю, как применить это к моему коду.

0

Решение

Это то, что я использовал в прошлом. Кроме того, столбец, с которым вы выполняете МАТЧ, должен быть изменен, чтобы разрешить FULLTEXT:

    $keyword = "Led Zeppelin";
$words = explode(" ",$keyword);

$keyword_parts = '';
foreach ($words as $w) {
$keyword_parts .= "+" . $w ." ";
}
$keyword_parts = substr($keyword_parts,0,-1);
$query = "SELECT
*,
MATCH (column1,column2) AGAINST ('" . $keyword . "') as score
FROM table
WHERE MATCH (column1,column2) AGAINST ('" . $keyword_parts . "' IN BOOLEAN MODE)
ORDER BY score DESC";
1

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

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

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