>  기사  >  백엔드 개발  >  PHP와 Elasticsearch를 사용하여 검색 결과를 표시하고 탐색하는 방법

PHP와 Elasticsearch를 사용하여 검색 결과를 표시하고 탐색하는 방법

WBOY
WBOY원래의
2023-07-18 11:13:27932검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.