Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwicklung: So verwenden Sie Elasticsearch zur Implementierung der Volltextsuche
In modernen Webanwendungen wachsen die Datenmengen, aber auch die Erwartungen der Benutzer und der Zugriff auf Daten. Daher wird Suchtechnologie immer wichtiger, um die Erwartungen der Benutzer zu erfüllen und ein besseres Benutzererlebnis zu bieten. Die Volltextsuche ist eine leistungsstarke Technologie, mit der große Datenmengen schnell indiziert, durchsucht und sortiert werden können. In dieser Hinsicht ist Elasticsearch eine führende Open-Source-Suchmaschine, die viele erweiterte Funktionen sowie hohe Verfügbarkeit, einfache Skalierbarkeit und andere Vorteile bietet.
In diesem Artikel stellen wir vor, wie Sie Elasticsearch verwenden, um die Volltextsuche über PHP zu implementieren. Wir beginnen mit der Einrichtung der Umgebung, einschließlich der Installation von Elasticsearch und PHP, und bieten dann eine ausführliche Einführung in die drei Hauptaspekte Indizierung, Suche und Analyse.
1. Umgebungseinrichtung
Installieren Sie zunächst Elasticsearch lokal oder auf dem Server. Elasticsearch kann von der offiziellen Website oder über den Paketmanager heruntergeladen und installiert werden.
Zweitens installieren Sie den PHP-Client von Elasticsearch über Composer, nämlich elasticsearch-php. Er bietet viele praktische Methoden und Klassen zum Aufrufen der Elasticsearch-API.
Composer erfordert Elasticsearch/Elasticsearch
Nach Abschluss der Installation konfigurieren Sie Folgendes in der PHP-Datei:
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build( );
Auf diese Weise entsteht ein Client, der mit dem Elasticsearch-Server kommuniziert.
2. Index
In Elasticsearch ist ein Index eine Datensammlung, die zum Speichern und schnellen Auffinden von Daten verwendet wird. Wir können die API von elasticsearch-php verwenden, um Daten in den Index einzufügen.
Zuerst müssen wir einen neuen Index erstellen. Wir verwenden den folgenden Code, um einen Typ namens „my_type“ im Index namens „my_index“ zu erstellen.
$params = [
'index' => 'my_index', 'body' => [ 'mappings' => [ 'my_type' => [ 'properties' => [ 'title' => ['type' => 'text'], 'body' => ['type' => 'text'], ] ] ] ]
];
$response = $client->indices()->create($params);
Feldtypen „title“ und „body“ im Array „properties“. ist „text“, was bedeutet, dass sie im Volltext indiziert werden. In der Praxis werden wir Indizes und Feldtypen entsprechend den spezifischen Anforderungen festlegen.
Auf diese Weise haben wir erfolgreich einen Index mit dem Namen „my_index“ erstellt.
Verwenden Sie den folgenden Code, um das Dokument in den Index einzufügen:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'title' => 'PHP Elasticsearch 全文检索', 'body' => 'Elasticsearch 是一个领先的全文搜索引擎,其功能包括分布式、高可用、实时搜索和分析能力等。', ]
];
$response = $client->index($params) ;
Hier fügen wir ein Dokument mit Titel und Text in den Index ein.
Wenn Sie ein Dokument aktualisieren müssen, das sich bereits im Index befindet, verwenden Sie den folgenden Code:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'id' => '1', 'body' => [ 'doc' => [ 'title' => '修改后的标题', 'body' => '修改后的正文内容', ] ]
];
$response = $client->update( $params);
Es ist zu beachten, dass bei der Aktualisierung die ID des Dokuments angegeben werden muss.
Wenn Sie ein vorhandenes Dokument löschen müssen, verwenden Sie den folgenden Code:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'id' => '1'
];
$response = $client->delete($params);
Damit haben wir das Erstellen, Einfügen, Aktualisieren und Löschen von Indizes und Dokumenten abgeschlossen.
3. Suche
Sehen wir uns an, wie man die Elasticsearch-PHP-API zum Suchen verwendet.
Zuerst führen wir eine einfache Abfrage aus:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]
];
$response = $client->search($params);
in der oben genannten Code führen wir eine Match-Abfrage für alle Dokumente im Index durch, die das Schlüsselwort „PHP“ enthalten. Die Suchergebnisse werden in der Variablen $response gespeichert.
Wenn Sie mehrere Bedingungen abfragen müssen, können Sie eine Bool-Abfrage verwenden, um mehrere Bedingungen zu kombinieren:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ [ 'match' => [ 'title' => 'PHP' ] ], [ 'match' => [ 'body' => '搜索引擎' ] ] ] ] ] ]
];
$response = $client->search ( $params);
Hier geben wir über den Must-Parameter zwei Abfragebedingungen an, die gleichzeitig erfüllt sein müssen.
Wenn die Datenmenge groß ist, können wir die Suchergebnisse paginieren:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'from' => 0, 'size' => 10, 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]
];
$response = $client->search($params);
Geben Sie den Offset und die Größe des Ergebnissatzes über die Parameter „from“ und „size“ an.
Für genauere Suchergebnisse berechnet Elasticsearch für jedes Dokument eine Relevanzbewertung. Mit dem folgenden Code können Sie nach Punktzahl sortieren:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ], 'sort' => [ '_score' => [ 'order' => 'desc' ] ] ]
];
$response = $client->search($params);
Auf diese Weise werden die Abfrageergebnisse nach sortiert Relevanzbewertung von hoch nach niedrig sortieren.
4. Analyse
Elasticsearch unterstützt eine Vielzahl leistungsstarker Analyse- und Aggregationsfunktionen, mit denen wir tiefere Informationen über den Datensatz erhalten können.
Der folgende Code kann die zehn Wörter mit der höchsten Häufigkeit des Vorkommens im Feld „Titel“ abrufen:
$params = [
'index' => 'my_index', 'type' => 'my_type', 'size' => 0, 'body' => [ 'aggs' => [ 'top_titles' => [ 'terms' => [ 'field' => 'title.keyword', 'size' => 10 ] ] ] ]
];
$response = $client-> search($params) ;
Geben Sie über den Größenparameter an, dass zurückgegebene Dokumente übersprungen und nur aggregierte Ergebnisse zurückgegeben werden sollen.
Elasticsearch bietet außerdem viele leistungsstarke Analysatoren zum Analysieren und Verarbeiten von Text. Der folgende Code zeigt, wie der chinesische Analysator zum Verarbeiten von Text verwendet wird:
$params = [
'index' => 'my_index', 'body' => [ 'settings' => [ 'analysis' => [ 'analyzer' => [ 'my_analyzer' => [ 'type' => 'custom', 'tokenizer' => 'ik_max_word' ] ] ] ] ]
];
$response = $client->indices()->putSettings($params);
这里,我们为名为“my_analyzer”的分析器指定了“ik_max_word”分词器。
下面的代码可以使用这个分析器来分析文本:
$params = [
'index' => 'my_index', 'body' => [ 'query' => [ 'query_string' => [ 'query' => '搜索', 'analyzer' => 'my_analyzer', 'default_field' => 'title' ] ] ]
];
$response = $client->search($params);
这样,我们就可以使用中文分析器来分析中文文本了。
总结
在本文中,我向您介绍了如何使用elasticsearch-php的API来创建、添加、更新和删除索引和文档,以及如何使用搜索API来执行简单和复杂的查询。此外,我还介绍了使用聚合和分析器来处理数据的相关技术。
随着数据集规模的增加,Elasticsearch的重要性逐渐增加。只要您熟悉它的API,您就可以通过PHP轻松地利用其强大的搜索和分析能力来优化您的Web应用程序。
Das obige ist der detaillierte Inhalt vonPHP-Entwicklung: So verwenden Sie Elasticsearch zur Implementierung der Volltextsuche. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!