PHP 및 Elasticsearch를 사용하여 검색 결과를 표시하고 탐색하는 방법
인터넷의 급속한 발전으로 검색 기능은 다양한 웹사이트와 애플리케이션의 표준 기능이 되었습니다. 검색 결과를 효율적으로 표시하고 우수한 탐색 경험을 제공하는 방법은 웹 사이트 개발자가 직면한 중요한 과제가 되었습니다. 이 기사에서는 PHP와 Elasticsearch를 사용하여 검색 결과 표시 및 탐색 기능을 구현하는 방법을 소개합니다.
1. 개발 환경 설정
먼저 PHP 및 Elasticsearch용 개발 환경을 설정해야 합니다. PHP 및 Elasticsearch 관련 패키지를 설치했는지 확인하세요.
2. 인덱스 만들기
시작하기 전에 데이터를 저장할 인덱스를 만들어야 합니다. 제품 검색 기능을 만들고 싶다고 가정하면 "제품"이라는 색인을 만들 수 있습니다. Elasticsearch에서 인덱스는 데이터베이스의 테이블과 유사하며 데이터를 저장하고 구성하는 데 사용됩니다.
다음 코드를 사용하여 "products"라는 인덱스를 생성합니다.
<?php require 'autoload.php'; use ElasticsearchClientBuilder; $hosts = [ 'localhost:9200' // Elasticsearch的主机和端口 ]; $client = ClientBuilder::create() ->setHosts($hosts) ->build(); $params = [ 'index' => 'products' // 索引名称 ]; $response = $client->indices()->create($params); echo "Index created successfully."; ?>
3. 데이터 가져오기
다음으로, 방금 생성한 인덱스로 데이터를 가져와야 합니다. 이 예에서는 일부 제품 정보의 JSON 데이터가 포함된 "products.json"이라는 파일이 있다고 가정합니다.
다음 코드를 사용하여 "products" 인덱스로 데이터를 가져옵니다.
<?php require 'autoload.php'; use ElasticsearchClientBuilder; $hosts = [ 'localhost:9200' // Elasticsearch的主机和端口 ]; $client = ClientBuilder::create() ->setHosts($hosts) ->build(); $params = [ 'index' => 'products', // 索引名称 'body' => [ // 导入数据的JSON数组 [ 'index' => [ '_index' => 'products', '_type' => 'product', ] ], [ 'title' => 'iPhone 11', 'description' => 'An amazing smartphone by Apple.', 'price' => 999, ], [ 'index' => [ '_index' => 'products', '_type' => 'product', ] ], [ 'title' => 'Samsung Galaxy S20', 'description' => 'A powerful smartphone by Samsung.', 'price' => 899, ], // 更多商品数据... ] ]; $response = $client->bulk($params); echo "Data imported successfully."; ?>
IV. 검색 기능 실행
이제 인덱스를 생성하고 데이터를 가져왔으므로 검색 기능을 구현할 수 있습니다. PHP에서는 Elasticsearch의 검색 API를 사용하여 검색 쿼리를 수행할 수 있습니다.
다음 코드를 사용하여 검색 기능을 구현합니다.
<?php require 'autoload.php'; use ElasticsearchClientBuilder; $hosts = [ 'localhost:9200' // Elasticsearch的主机和端口 ]; $client = ClientBuilder::create() ->setHosts($hosts) ->build(); $params = [ 'index' => 'products', // 索引名称 'body' => [ 'query' => [ 'match' => [ 'title' => 'iPhone' // 搜索关键字 ] ] ] ]; $response = $client->search($params); // 处理搜索结果 foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . "<br>"; echo $hit['_source']['description'] . "<br>"; echo $hit['_source']['price'] . "<br>"; echo "<hr>"; } ?>
위 코드는 Elasticsearch의 "일치" 쿼리를 사용하여 검색을 수행하고 검색 결과를 탐색하여 표시합니다.
5. 결과 페이징 및 탐색 구현
일반적으로 검색 결과의 수가 많을 수 있으므로 더 나은 사용자 경험을 제공하기 위해서는 결과 페이징 및 탐색 기능을 구현해야 합니다. PHP에서는 Elasticsearch의 "from" 및 "size" 매개변수를 사용하여 페이징을 구현할 수 있습니다.
다음 코드를 사용하여 페이징 및 탐색 기능을 구현합니다.
<?php require 'autoload.php'; use ElasticsearchClientBuilder; $hosts = [ 'localhost:9200' // Elasticsearch的主机和端口 ]; $client = ClientBuilder::create() ->setHosts($hosts) ->build(); $page = isset($_GET['page']) ? intval($_GET['page']) : 1; // 当前页数 $perPage = 10; // 每页显示的数量 $from = ($page - 1) * $perPage; $params = [ 'index' => 'products', // 索引名称 'body' => [ 'from' => $from, // 从第几个结果开始 'size' => $perPage // 每页显示的数量 'query' => [ 'match' => [ 'title' => 'iPhone' // 搜索关键字 ] ] ] ]; $response = $client->search($params); // 处理搜索结果 foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . "<br>"; echo $hit['_source']['description'] . "<br>"; echo $hit['_source']['price'] . "<br>"; echo "<hr>"; } // 显示分页导航 $totalPages = ceil($response['hits']['total']['value'] / $perPage); // 总页数 for ($i = 1; $i <= $totalPages; $i++) { echo "<a href='search.php?page=$i'>$i</a>"; } ?>
위 코드는 사용자의 요청 매개변수를 기반으로 현재 페이지 번호를 결정하고 "from" 및 "size" 매개변수를 사용하여 결과 범위를 제어합니다. 동시에 페이지가 매겨진 탐색은 전체 검색 결과 수와 각 페이지에 표시된 수를 기반으로 계산되어 표시됩니다.
요약
이 글에서는 PHP와 Elasticsearch를 사용하여 검색 결과 표시 및 탐색 기능을 구현하는 방법을 소개합니다. 개발 환경 설정, 인덱스 생성, 데이터 가져오기, 검색 기능 실행을 통해 효율적인 검색 경험을 얻을 수 있으며 페이지 매김 탐색을 통해 더 나은 사용자 경험을 제공할 수 있습니다. 나는 독자들이 이 기사의 샘플 코드를 기반으로 자신의 프로젝트에 이를 쉽게 적용할 수 있다고 믿습니다.
위 내용은 PHP와 Elasticsearch를 사용하여 검색 결과를 표시하고 탐색하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!