隨著Web應用程式的興起,搜尋引擎已經成為了現代應用程式不可或缺的特性。在過去,我們使用SQL查詢來搜尋數據,但SQL不是專門為搜尋而設計的。為了彌補這個缺陷,創建了全文搜尋引擎,例如Apache Solr、Elasticsearch等。
Elasticsearch是一款流行的基於Lucene的全文搜尋引擎,它提供了開箱即用的分散式搜尋和分析功能,可用於即時資料分析和搜尋引擎。相較於傳統的關係型資料庫,Elasticsearch能夠更快地進行查詢,而且能夠更好地處理高度動態的資料結構,支援更豐富的查詢語言等。
在本文中,我們將介紹如何在PHP應用程式中使用Elasticsearch。
環境準備
首先,我們需要在本機環境或遠端伺服器上安裝Elasticsearch。 Elasticsearch支援所有常見的作業系統,包括Windows、macOS和Linux。可以在官網上取得各種版本的安裝程序,也可以使用套件管理器進行安裝。
為了使用PHP的elasticsearch客戶端程式庫,我們也需要安裝PHP的elasticsearch客戶端擴充功能。可以透過PECL或手動下載和編譯安裝。以下是使用PECL的範例:
pecl install elasticsearch
然後在php.ini中加入以下行:
extension=elasticsearch.so
安裝完成後,我們可以使用PHP來操作Elasticsearch。
PHP中使用Elasticsearch
在PHP中使用Elasticsearch需要使用一個Elasticsearch客戶端類別或函式庫。目前,有許多可用的PHP Elasticsearch客戶端程式庫,包括Elasticsearch-PHP、Elasticsearch-DSL和Elastica等。
在本文中,我們將使用Elasticsearch-PHP函式庫來示範Elasticsearch的使用。
首先,我們需要建立一個Elasticsearch的客戶端物件:
$client = ElasticsearchClientBuilder::create()->build();
現在,我們可以使用這個客戶端物件來與Elasticsearch建立連線並進行各種操作。
索引和搜尋文件
在Elasticsearch中,文件是指JSON格式的資料。使用PHP Elasticsearch客戶端庫,我們可以方便地將PHP數組轉換為JSON格式並索引到Elasticsearch中。首先,我們需要選擇一個索引(類似於關聯式資料庫中的表),然後將資料新增到該索引中。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => '1', 'body' => ['title' => 'My first document', 'content' => 'Hello World'] ]; $response = $client->index($params);
在上面的程式碼中,我們使用了 index
方法來索引文件。 index
方法需要一個參數數組,它至少包含以下鍵:
-
index
:索引的名稱 -
type
:文件的類型 -
id
:文件的唯一識別碼 -
#body
:包含文件資料的陣列或JSON格式字串
上述程式碼範例建立了一個名為my_index
的索引,類型為my_type
,文件唯一識別碼為1,並包含一個title
和content
欄位。一旦文件被索引並儲存到Elasticsearch中,我們就可以搜尋它們了。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'My first document' ] ] ] ]; $response = $client->search($params);
在上面的程式碼中,我們使用 search
方法搜尋文件。 search
方法需要一個參數數組,它至少包含以下鍵:
-
#index
:要搜尋的索引的名稱 -
type
:要搜尋的文件類型 -
body
:包含實際搜尋查詢的陣列
上述程式碼範例搜尋了my_index
索引中,類型為my_type
且title
包含My first document
的文件。搜尋結果是一個JSON格式的回應,其中包含符合查詢的文件。
分頁和排序
當搜尋結果集很大時,我們可能會想要對結果進行分頁或排序。我們可以使用Elasticsearch提供的參數來實現這兩個功能。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'document' ] ] ], 'size' => 10, 'from' => 0, 'sort' => ['title' => ['order' => 'asc']] ]; $response = $client->search($params);
在上面的程式碼中,我們加入了以下額外的參數:
-
#size
:每頁文件的數量 -
from
:起始文件的位置,用於分頁 -
sort
:按title
欄位進行升序排序
以上範例取得了前10個符合document
的文檔,並按title
欄位升序排序。
聚合搜尋
Elasticsearch也支援聚合搜索,這是一種在搜尋結果集上執行各種分析的技術。例如,我們可以從搜尋結果中提取所有 author
欄位的唯一值。
$params = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'aggs' => [ 'unique_authors' => [ 'terms' => [ 'field' => 'author.keyword', 'size' => 10 ] ] ] ] ]; $response = $client->search($params);
在上面的程式碼中,我們使用 aggs
作為參數陣列中的新鍵,並在其中定義了一個名稱為 unique_authors
的聚合搜尋。 terms
表示我們將依照 author
欄位的值進行分組聚合。 field
鍵用於指定要聚合的字段,size
鍵指定了聚合分組的大小限制。
結論
Elasticsearch是一個功能強大的全文搜尋引擎,已成為許多現代Web應用必不可少的組成部分,它能幫助我們更好地處理資料並進行即時搜尋。本文介紹如何在PHP中使用Elasticsearch,以及如何索引、搜尋、分頁和排序文件。此外,也介紹如何使用Elasticsearch進行聚合搜尋。現在,你已經學會如何使用Elasticsearch在PHP應用程式中實現高效且快速的搜尋。
以上是PHP中如何使用Elasticsearch技術?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

在PHP中,trait適用於需要方法復用但不適合使用繼承的情況。 1)trait允許在類中復用方法,避免多重繼承複雜性。 2)使用trait時需注意方法衝突,可通過insteadof和as關鍵字解決。 3)應避免過度使用trait,保持其單一職責,以優化性能和提高代碼可維護性。

依賴注入容器(DIC)是一種管理和提供對象依賴關係的工具,用於PHP項目中。 DIC的主要好處包括:1.解耦,使組件獨立,代碼易維護和測試;2.靈活性,易替換或修改依賴關係;3.可測試性,方便注入mock對象進行單元測試。

SplFixedArray在PHP中是一種固定大小的數組,適用於需要高性能和低內存使用量的場景。 1)它在創建時需指定大小,避免動態調整帶來的開銷。 2)基於C語言數組,直接操作內存,訪問速度快。 3)適合大規模數據處理和內存敏感環境,但需謹慎使用,因其大小固定。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

JavaScript中處理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。 1.??返回第一個非null或非undefined的操作數。 2.??=將變量賦值為右操作數的值,但前提是該變量為null或undefined。這些操作符簡化了代碼邏輯,提高了可讀性和性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境