首頁  >  文章  >  後端開發  >  PHP與Elasticsearch整合實作全文檢索功能詳解

PHP與Elasticsearch整合實作全文檢索功能詳解

王林
王林原創
2023-06-25 10:14:07924瀏覽

隨著網路的發展,企業面對的文字資料越來越龐大。如何快速、精確地檢索相關內容,成為企業在資訊化領域的重要議題之一。 Elasticsearch作為一個基於Lucene的開源搜尋引擎,具有高可用性、高可擴展性和快速檢索的特點,成為企業全文檢索的首選方案之一。而PHP作為一門流行的伺服器端程式語言,也能夠快速進行Web開發與API開發,成為與Elasticsearch整合的常用語言之一。

本篇文章主要講解PHP和Elasticsearch集成,實現全文檢索功能的詳細步驟。

一、Elasticsearch簡介

Elasticsearch是一款基於Lucene的開源搜尋引擎,可用於快速、準確地檢索大量文字資料。 Elasticsearch採用分散式儲存架構,支援水平擴展,能夠適應海量資料儲存和快速檢索的需求。

Elasticsearch提供了RESTful API接口,支援JSON格式的資料交互,與常用的程式語言都可以進行整合。在Elasticsearch中,資料按照文檔存儲,每個文檔包含多個字段,每個字段又可以嵌套包含其他字段,使得資料結構更加靈活。同時,Elasticsearch支援對文件進行全文檢索、精確匹配、聚合、分析等操作。

二、PHP與Elasticsearch整合

  1. 安裝Elasticsearch-PHP函式庫

Elasticsearch-PHP是官方提供的PHP客戶端函式庫,封裝了Elasticsearch的RESTful API接口,可以方便地在PHP應用中進行Elasticsearch的操作。我們可以透過Composer安裝該程式庫,執行以下命令:

composer require elasticsearch/elasticsearch
  1. 連接Elasticsearch

連接Elasticsearch之前,需要先啟動Elasticsearch服務。在PHP中使用Elasticsearch-PHP庫連接Elasticsearch,需要先實例化ElasticsearchClient對象,並設定連接的Elasticsearch伺服器ip和連接埠:

require 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()->setHosts(['http://127.0.0.1:9200'])->build();

其中,setHosts()方法傳入一個陣列參數,每個元素表示一個Elasticsearch伺服器,可以設定多個伺服器,實現高可用性和負載平衡。

  1. 建立索引

在Elasticsearch中,索引是用於儲存和檢索相似資料的資料結構,類似於資料庫中的表。可以透過以下程式碼建立一個名為「my_index」的索引:

$params = [
    'index' => 'my_index',
    'body' => [
        'settings' => [
            'number_of_shards' => 5, // 分片数
            'number_of_replicas' => 1, // 副本数
        ],
    ],
];

$response = $client->indices()->create($params);

其中,$params數組參數中,'settings'表示索引的設置,包含分片數和副本數等資訊。 'body'表示索引的映射,可以在該參數中設定索引的欄位和類型等。

  1. 新增文檔

在Elasticsearch中新增文檔,可以透過以下程式碼實現:

$params = [
    'index' => 'my_index',
    'id' => '1',
    'body' => [
        'title' => 'Elasticsearch PHP集成',
        'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...'
    ]
];

$response = $client->index($params);

其中,$params數組參數中,'index'表示要新增文件的索引名稱;'id'表示文件的唯一標識,可選參數;'body'表示文件的內容,可以設定多個欄位和值。

  1. 搜尋文檔

在Elasticsearch中搜尋文檔,可以透過以下程式碼實現:

$params = [
    'index' => 'my_index',
    'body'  => [
        'query' => [
            'match' => [
                'title' => 'Elasticsearch PHP'
            ]
         ]
    ]
];

$response = $client->search($params);

其中,$params數組參數中,'index'表示要搜尋文件的索引名稱;'body'表示查詢條件,可以設定多個查詢條件和排序規則。

三、PHP Elasticsearch實現全文檢索

  1. 建立索引

在使用Elasticsearch實現全文檢索之前,需要先將要檢索的資料建立索引。建立索引時,可以將要檢索的欄位設定成text類型,這樣就可以進行全文索引。

在本例中,假設要檢索的資料為學生表,包含欄位id、name、age和score。我們可以透過以下程式碼建立一個名為「student」的索引:

$params = [
    'index' => 'student',
    'body' => [
        'settings' => [
            'number_of_shards' => 5,
            'number_of_replicas' => 1,
        ],
        'mappings' => [
            'properties' => [
                'id' => ['type' => 'integer'],
                'name' => ['type' => 'text', 'analyzer' => 'ik_max_word'],
                'age' => ['type' => 'integer'],
                'score' => ['type' => 'double']
            ]
        ]
    ]
];

$response = $client->indices()->create($params);

其中,'name'欄位的類型設定為text,同時指定了分詞器,這裡使用了中文分詞外掛ik_max_word,可以將中文文本依照最大化分詞的方式處理。

  1. 新增文件

在建立索引後,可以在索引中新增文件。假設要新增一個學生訊息,可以透過以下程式碼實現:

$params = [
    'index' => 'student',
    'body' => [
        'id' => 1,
        'name' => '张三',
        'age' => 18,
        'score' => 90.5
    ]
];

$response = $client->index($params);

可以透過循環添加的方式,向索引中新增多個文件。

  1. 搜尋文件

在建立索引並新增文件後,可以進行全文檢索。在本例中,使用了match查詢實現全文檢索,可以透過輸入關鍵字進行檢索。可以透過以下程式碼實現:

$params = [
    'index' => 'student',
    'body'  => [
        'query' => [
            'match' => [
                'name' => '张三'
            ]
         ]
    ]
];

$response = $client->search($params);

其中,'name'欄位用於匹配,可以更換為其他需要進行全文檢索的欄位。搜尋結果傳回的資訊在$response中,可以取得查詢結果並進行展示。

四、總結

本篇文章介紹了PHP與Elasticsearch整合實現全文檢索功能的詳細步驟。透過連接Elasticsearch、建立索引、新增文件和搜尋文件等步驟,可以實現快速、準確地檢索大量文字資料的功能。在進行全文檢索時,建議使用分詞器對中文進行切分,以提高搜尋的準確性和效率。

以上是PHP與Elasticsearch整合實作全文檢索功能詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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