>  기사  >  백엔드 개발  >  PHP에서 Solr을 사용한 전체 텍스트 검색

PHP에서 Solr을 사용한 전체 텍스트 검색

王林
王林원래의
2023-06-20 09:12:061802검색

Solr는 전체 텍스트 검색을 구현하는 데 사용할 수 있는 Lucene 기반 검색 엔진입니다. 전체 텍스트 검색을 위해 PHP에서 Solr를 사용하면 키워드를 통해 관련 데이터를 신속하게 쿼리하고 검색 결과의 정확성과 신뢰성을 향상시킬 수 있습니다. 이 기사에서는 전체 텍스트 검색을 위해 PHP에서 Solr를 사용하는 방법을 소개합니다.

1. Solr 설치 및 구성

먼저 서버에 Solr 및 PHP의 Solr 확장을 설치해야 합니다. Solr 설치 단계는 Solr 공식 문서를 참조하세요. PHP의 Solr 확장은 다음 명령을 사용하여 설치할 수 있습니다:

sudo pecl install solr

설치가 완료된 후 예를 들어 Ubuntu에서 Solr 확장을 PHP 구성 파일에 추가해야 합니다. /etc/php/7.0/apache2/php.ini 파일을 편집하고 다음 내용을 추가할 수 있습니다:

extension=solr.so

파일을 저장하고 종료한 후 Apache 서버를 다시 시작하여 구성을 적용합니다.

2. Solr 인덱스 생성

Solr 및 PHP용 Solr 확장을 설치한 후 Solr 인덱스를 생성해야 합니다. Solr 인덱스는 전체 텍스트 검색을 지원하는 데 사용되는 데이터베이스 테이블의 모든 데이터에 해당하는 빠른 조회 테이블입니다. Solr 인덱스를 생성하는 단계는 다음과 같습니다.

  1. 새 Solr 코어 생성
sudo su - solr -c "/opt/solr/bin/solr create -c mycore"

"mycore"는 인덱스와 유사한 이름이며 직접 정의할 수 있습니다. 성공적으로 생성되면 http://localhost:8983/solr/#/mycore를 방문하여 볼 수 있습니다.

  1. Solr에서 인덱스 필드 정의

Solr에서는 인덱싱에 필요한 필드를 정의해야 합니다. 예를 들어 기사의 제목과 본문 내용을 검색하려면 제목과 내용 필드를 각각 정의해야 합니다.

Solr 관리 인터페이스에서 정의할 수 있습니다. 왼쪽의 "스키마" 버튼을 클릭하고 "필드" 탭에서 "필드 추가"를 클릭하고 필드 이름을 "title"로 입력하고 필드 유형을 "text_cn"으로 입력합니다. " (text_cn은 Solr용 중국 분석기입니다.) "저장" 버튼을 클릭하여 저장하세요.

마찬가지로 "text_cn" 유형을 사용하여 "content"라는 필드를 생성할 수 있습니다.

  1. Solr 인덱스로 데이터 가져오기

Solr 코어를 생성하고 인덱스 필드를 정의한 후에는 데이터베이스의 데이터를 Solr 인덱스로 가져와야 합니다. 이는 PHP 스크립트를 작성하여 달성할 수 있습니다.

다음은 샘플 코드입니다.

<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "mydatabase";

//连接数据库
$conn = new mysqli($servername, $username, $password, $dbname);

//检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
} 

//查询数据库中的数据
$sql = "SELECT id, title, content FROM articles";
$result = $conn->query($sql);

//创建Solr客户端
$options = array(
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore'
);
$client = new SolrClient($options);

//将数据导入到Solr索引中
while($row = $result->fetch_assoc()) {
    $doc = new SolrInputDocument();
    $doc->addField('id', $row['id']);
    $doc->addField('title', $row['title']);
    $doc->addField('content', $row['content']);
    $client->addDocument($doc);
}
$client->commit();
$client->optimize();
echo "Solr索引创建成功!";

//关闭数据库连接
$conn->close();
?>

위 코드에서 SolrClient() 메서드의 $username, $password, $dbname, $options 및 mycore를 해당 값으로 바꿔야 합니다.

이 스크립트를 실행하면 Solr 인덱스에 데이터베이스의 데이터가 포함되며 관련 데이터를 키워드로 검색할 수 있습니다.

3. Solr를 통한 전체 텍스트 검색

인덱스에 데이터가 포함된 후 Solr를 사용하여 전체 텍스트 검색을 수행할 수 있습니다. 검색 기능은 PHP 애플리케이션을 통해 Solr 서버와 통신하여 구현할 수 있습니다. Solr에서 제공하는 쿼리 언어는 SOLRQ(Solr Query Language)입니다. 쿼리 구문은 요청된 데이터를 Solr가 인덱싱한 데이터와 비교하여 필요한 텍스트가 포함된 문서를 식별하는 데 사용됩니다.

다음은 간단한 검색 코드 예시입니다.

<?php
//创建Solr客户端
$options = array(
    'hostname' => 'localhost',
    'port'     => 8983,
    'path'     => '/solr/mycore'
);
$client = new SolrClient($options);

//查询数据
$query = 'title:关键词';
$query_response = $client->query($query);
$response = $query_response->getResponse();
$docs = $response['response']['docs'];
foreach ($docs as $doc) {
     echo $doc['title'] . "
";
}
?>

위 코드에서 $options, mycore 및 $query의 "keywords"를 해당 값으로 바꿔야 합니다.

검색 구문에서 제목:키워드는 제목에 "키워드"가 포함된 문서를 검색한다는 의미입니다. 콘텐츠를 검색하려면 content: 키워드 형식을 사용할 수 있습니다. 퍼지 쿼리, 범위 쿼리, 부울 쿼리 등과 같이 쿼리에 추가 수정 작업을 수행할 수도 있습니다.

4. 요약

이 글에서는 전체 텍스트 검색을 위해 PHP에서 Solr를 사용하는 기본 단계를 소개합니다. 먼저 Solr 인덱스를 생성하여 데이터베이스의 데이터를 Solr 인덱스로 가져온 다음 PHP 애플리케이션을 통해 Solr 서버와 통신하여 검색 및 기타 작업을 수행합니다. 실제 응용에서는 더 많은 기능적 속성과 구성 옵션을 배우고 사용해야 합니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 PHP에서 Solr을 사용한 전체 텍스트 검색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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