Fulltextové vyhľadávanie v MySQL umožňuje efektívne prehľadávanie veľkých textových dát.
Základný script ktorý potrebujeme a ktorý si môžete prispôsobiť podľa svojich potrieb, napríklad pridať ďalšie polia na vyhľadávanie alebo upraviť vzhľad výsledkov je tento:
<?php
// Konfigurácia databázy
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "fulltext_search_demo";
// Vytvorenie pripojenia
$conn = new mysqli($servername, $username, $password, $dbname);
// Kontrola pripojenia
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Vytvorenie databázy a tabuľky s fulltextovým indexom
$sql = "CREATE DATABASE IF NOT EXISTS fulltext_search_demo;
USE fulltext_search_demo;
CREATE TABLE IF NOT EXISTS articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
FULLTEXT (title, content)
);";
if ($conn->multi_query($sql) === TRUE) {
echo "Database and table created successfully\n";
} else {
echo "Error creating database or table: " . $conn->error;
}
// Čakanie na dokončenie všetkých dotazov
while ($conn->next_result()) {;} // Flush multi_queries
// Vloženie ukážkových dát
$sql = "INSERT INTO articles (title, content) VALUES
('First Article', 'This is the content of the first article. It contains some text to search.'),
('Second Article', 'Content of the second article. It also has text to be searched.'),
('Third Article', 'Here is the content of the third article. This one has different text.');";
if ($conn->query($sql) === TRUE) {
echo "Sample data inserted successfully\n";
} else {
echo "Error inserting data: " . $conn->error;
}
// Vyhľadávací dotaz
$search = isset($_GET['search']) ? $_GET['search'] : '';
if ($search) {
$sql = "SELECT id, title, content FROM articles WHERE MATCH (title, content) AGAINST (?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $search);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// Výpis výsledkov vyhľadávania
echo "<h2>Search Results for '$search':</h2>";
while($row = $result->fetch_assoc()) {
echo "<h3>" . $row["title"] . "</h3><p>" . $row["content"] . "</p>";
}
} else {
echo "No results found for '$search'";
}
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html>
<head>
<title>Fulltext Search</title>
</head>
<body>
<form method="get" action="">
<input type="text" name="search" placeholder="Search...">
<button type="submit">Search</button>
</form>
</body>
</html>
Vysvetlenie kódu
- Konfigurácia databázy a pripojenie:
- Nastavenie parametrov pripojenia k databáze.
- Vytvorenie pripojenia pomocou
mysqli
.
- Vytvorenie databázy a tabuľky:
- Vytvorenie databázy
fulltext_search_demo
a tabuľkyarticles
s fulltextovým indexom na stĺpcochtitle
acontent
.
- Vytvorenie databázy
- Vloženie ukážkových dát:
- Vloženie niekoľkých ukážkových záznamov do tabuľky
articles
.
- Vloženie niekoľkých ukážkových záznamov do tabuľky
- Vyhľadávací dotaz:
- Vyhľadávací dotaz je vykonaný, ak je v adrese URL parameter
search
. - Použitie
MATCH
aAGAINST
na vykonanie fulltextového vyhľadávania.
- Vyhľadávací dotaz je vykonaný, ak je v adrese URL parameter
- Výpis výsledkov:
- Výsledky vyhľadávania sú zobrazené, ak nejaké záznamy zodpovedajú vyhľadávaciemu dotazu.
- HTML formulár:
- Jednoduchý HTML formulár pre zadanie vyhľadávacieho dotazu.
Celá debata | RSS tejto debaty