首頁  >  文章  >  後端開發  >  PHP中如何使用Elasticsearch技術?

PHP中如何使用Elasticsearch技術?

WBOY
WBOY原創
2023-05-13 08:04:501749瀏覽

隨著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_typetitle 包含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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn