현대 웹사이트 개발에서는 검색 기능이 필수적입니다. 그러나 사용자가 쿼리 키워드를 입력하기 시작하면 검색 엔진은 일반적으로 사용자가 입력을 완료할 때까지 기다린 후 전체 검색을 수행합니다. 이로 인해 특히 데이터 양이 많은 경우 사용자 경험과 응답성이 저하될 수 있습니다.
사용자 경험과 응답 속도를 향상시키기 위해 자동 완성 검색 기능을 사용할 수 있습니다. 자동 완성 검색 기능을 사용하면 사이트는 즉시 응답하고 사용자 입력과 가장 가능성이 높은 인용을 기반으로 가능한 검색 결과를 표시합니다.
이 글에서는 PHP와 Redis를 사용하여 자동 완성 검색 기능을 구현하는 방법을 소개합니다.
PHP는 웹 개발에 널리 사용되는 범용 프로그래밍 언어입니다. Redis는 캐싱 및 고속 데이터 액세스를 위한 빠른 인메모리 키/값 저장소 데이터베이스입니다. 우리는 이 두 가지 기술을 사용하여 자동 완성 검색 구현을 구축할 것입니다.
먼저 사용자 입력을 캡처하고 가능한 검색 결과를 표시하기 위한 입력 상자를 만들어야 합니다. HTML과 JavaScript를 사용하여 이러한 기능을 구현할 수 있습니다. 사용자가 입력 상자에 쿼리 키워드를 입력하면 JavaScript를 사용하여 서버에서 일치하는 검색 결과를 요청하고 이를 드롭다운 메뉴에 표시할 수 있습니다. 페이지를 새로 고치지 않고 자동화된 요청을 구현하려면 AJAX 기술이 필요합니다.
이제 이 요청을 서버 측으로 보내야 합니다. PHP를 사용하여 이 작업을 처리할 수 있습니다. 먼저 AJAX 요청에 응답하기 위해 서버 측에서 스크립트를 생성해야 합니다. 이 스크립트는 사용자 입력을 처리하고 데이터 검사를 위해 Redis 캐시를 활용합니다.
Redis를 사용하면 키워드 및 참조 계산된 키/값 쌍을 메모리에 저장할 수 있습니다. 검색 키워드가 입력되면 메모리에서 관련 키워드를 즉시 찾아 참조 횟수를 업데이트할 수 있습니다. 캐싱을 사용하면 검색 결과를 검색하는 속도를 향상시킬 수 있습니다.
PHP 스크립트는 다음 단계를 따라야 합니다.
The 다음 단계는 관련 검색 결과를 추출하는 PHP 코드를 작성하는 것입니다. Redis 데이터베이스에 키워드와 참조 횟수를 저장한다고 가정하면 다음 코드를 사용하여 관련 검색 결과를 추출할 수 있습니다:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379 ) ;
$query = $_GET['query'];
$keywords = $redis->zRevRange('keywords', 0, -1, 'WITHSCORES');
$results = array();
foreach ($keywords as $keyword => $score) {
if (stripos($keyword, $query) === 0) { $results[] = array( 'name' => $keyword, 'score' => $score ); }
}
usort($results, function($elem1, $elem2) {
return $elem2['score'] - $elem1['score'];
});
echo json_encode($results);
여기 Redis에서 zRevRange() 메서드를 사용하여 모든 키워드 키/값 쌍을 추출하고 가장 높은 참조 횟수에서 가장 낮은 참조 횟수로 정렬합니다. 그런 다음, Stripos() 함수를 사용하여 퍼지 매칭을 수행하고 관련 검색 결과를 필터링한 후 결과 집합에 추가합니다. 마지막으로 usort() 함수를 사용하여 참조 횟수를 기준으로 검색 결과를 정렬합니다. 마지막으로 json_encode() 함수를 사용하여 결과를 JSON 형식으로 변환하고 Javascript로 반환합니다.
이 시점에서 우리는 PHP와 Redis를 사용하여 자동 완성 검색을 구현하는 기본 기능을 완료했습니다. 이 기능을 사용하면 사용자가 검색 결과를 보기 전에 전체 검색이 완료될 때까지 기다릴 필요가 없으므로 크게 향상됩니다. 사용자 경험과 응답 속도.
위 내용은 PHP 및 Redis를 사용하여 자동 완성 검색 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!