인터넷의 급속한 발전과 데이터 양의 증가로 인해 어떻게 효율적으로 전체 텍스트 검색을 수행할 것인가가 점점 더 많은 개발자들이 직면한 문제가 되었습니다. Elasticsearch는 대량의 텍스트 데이터를 신속하게 처리하고 검색 및 분석할 수 있는 인기 있는 전체 텍스트 검색 엔진으로, 많은 웹 애플리케이션에서 선택되는 도구입니다. 이제 ThinkPHP6은 Elasticsearch 전체 텍스트 검색 작업도 지원하기 시작하여 개발자에게 더욱 효율적인 검색 솔루션을 제공합니다.
먼저 ThinkPHP6에 Elasticsearch 지원 라이브러리를 설치해야 합니다. 이는 작곡가.json 파일에 다음 코드를 추가하여 수행할 수 있습니다:
"require": {
"elasticsearch/elasticsearch": "^7.0"
}
그런 다음 프로젝트에서 작곡가를 실행합니다. Elasticsearch 지원 라이브러리 설치를 완료하려면 루트 디렉터리 업데이트 명령을 사용하세요.
다음으로, 종속성 주입을 통해 애플리케이션에서 항상 사용할 수 있도록 Elasticsearch 클라이언트 인스턴스를 컨테이너에 바인딩하는 Elasticsearch 서비스 공급자를 생성하겠습니다. App/Provider 디렉터리에서 다음 코드를 사용하여 ElasticsearchServiceProvider.php 파일을 생성합니다.
namespace appprovider;
use ElasticsearchClientBuilder;
use thinkService;
class ElasticsearchServiceProvider extends Service
{
public function register() { // 获取config/elasticsearch.php配置 $config = $this->app->config->get('elasticsearch'); // 创建Elasticsearch客户端实例 $client = ClientBuilder::create()->setHosts($config['hosts'])->build(); // 将Elasticsearch客户端实例绑定到容器中 $this->app->bind('elasticsearch', $client); }
}
이 경우, 먼저 config/elasticsearch.php 구성 파일에서 Elasticsearch의 호스트 주소를 가져온 다음 ClientBuilder 클래스를 사용하여 Elasticsearch 클라이언트 인스턴스를 생성하고 이를 애플리케이션의 컨테이너에 바인딩하여 언제든지 전체 텍스트 검색을 수행하는 데 사용할 수 있습니다. 시간 운영.
다음으로 ThinkPHP6 애플리케이션에서 전체 텍스트 검색 작업을 수행하는 방법을 보여드리겠습니다. 여기서는 검색 작업을 수행하는 몇 가지 간단한 메서드가 포함된 ElasticsearchService 서비스 클래스를 만듭니다. 코드는 다음과 같습니다.
namespace appservice;
use ElasticsearchClient;
use ElasticsearchCommonExceptionsMissing404Exception;
use Throwable;
class ElasticsearchService
{
protected $client; public function __construct(Client $client) { $this->client = $client; } /** * 创建索引 * * @param string $indexName 索引名称 * @return bool */ public function createIndex(string $indexName) { $params = [ 'index' => $indexName, 'body' => [ 'mappings' => [ 'properties' => [ 'title' => [ 'type' => 'text' ], 'content' => [ 'type' => 'text' ] ] ] ] ]; try { $response = $this->client->indices()->create($params); return true; } catch (Throwable $e) { throw new Exception('创建索引失败:' . $e->getMessage()); } } /** * 删除索引 * * @param string $indexName 索引名称 * @return bool */ public function deleteIndex(string $indexName) { try { $response = $this->client->indices()->delete(['index' => $indexName]); return true; } catch (Missing404Exception $e) { return false; } catch (Throwable $e) { throw new Exception('删除索引失败:' . $e->getMessage()); } } /** * 添加文档 * * @param string $indexName 索引名称 * @param string $id 文档ID * @param array $data 文档数据 * @return bool */ public function indexDocument(string $indexName, string $id, array $data) { $params = [ 'index' => $indexName, 'id' => $id, 'body' => $data ]; try { $response = $this->client->index($params); return true; } catch (Throwable $e) { throw new Exception('添加文档失败:' . $e->getMessage()); } } /** * 搜索文档 * * @param string $indexName 索引名称 * @param string $query 查询字符串 * @return array */ public function searchDocuments(string $indexName, string $query) { $params = [ 'index' => $indexName, 'body' => [ 'query' => [ 'match' => [ '_all' => $query ] ] ] ]; try { $response = $this->client->search($params); return $response['hits']['hits']; } catch (Throwable $e) { throw new Exception('搜索文档失败:' . $e->getMessage()); } }
}
이 서비스 클래스에서는 createIndex, deleteIndex, indexDocument 및 searchDocuments. 이러한 방법은 Elasticsearch API에 대한 호출을 캡슐화하여 인덱스 생성 및 삭제, 문서 추가 및 검색을 쉽게 만듭니다.
이제 이러한 방법을 사용하는 방법을 보여 드리겠습니다. 여기서는 테스트 페이지를 만들고 "articles"라는 색인을 만들고 일부 문서를 추가한 다음 검색 상자를 사용하여 문서를 검색합니다. App/controller 디렉터리에서 다음 코드를 사용하여 ElasticsearchTestController.php 파일을 생성합니다.
namespace appcontroller;
use appServiceElasticsearchService;
use thinkRequest;
class ElasticsearchTestController는 BaseController를 확장합니다
{
protected $elasticsearchService; public function __construct(ElasticsearchService $elasticsearchService) { $this->elasticsearchService = $elasticsearchService; } public function index() { $this->elasticsearchService->createIndex('articles'); // 添加测试文档 $this->elasticsearchService->indexDocument('articles', '1', [ 'title' => 'ThinkPHP', 'content' => 'ThinkPHP是一款优秀的PHP开发框架' ]); $this->elasticsearchService->indexDocument('articles', '2', [ 'title' => 'Laravel', 'content' => 'Laravel是一款流行的PHP开发框架' ]); $this->elasticsearchService->indexDocument('articles', '3', [ 'title' => 'Symfony', 'content' => 'Symfony是一款PHP开发框架' ]); // 搜索框 $search = Request::instance()->get('search', ''); // 搜索结果 $results = $this->elasticsearchService->searchDocuments('articles', $search); // 返回搜索结果 return $this->fetch('index', [ 'results' => $results ]); }
}
in this 컨트롤러, ElasticsearchService 서비스를 주입하고 index 메소드에서 createIndex, indexDocument 및 searchDocuments 메소드를 호출하여 인덱스 생성, 문서 추가 및 검색 작업을 수행했습니다. 검색창과 검색결과도 인덱스 방식에 포함됩니다.
이 시점에서 우리는 ThinkPHP6 애플리케이션에서 전체 텍스트 검색 작업에 Elasticsearch를 사용하는 데모를 완료했습니다. 본 예시는 단지 단순한 시연 사례일 뿐이라는 점을 참고하시기 바랍니다. 실제 프로젝트에서는 검색 효율성과 검색 결과의 정확성을 보장하기 위해 보다 상세한 인덱스 설계 및 문서 관리가 필요합니다.
일반적으로 Elasticsearch가 널리 적용되면서 웹 애플리케이션에서 매우 인기 있고 효율적인 전체 텍스트 검색 엔진이 되었습니다. ThinkPHP6에서는 Elasticsearch 지원 라이브러리와 Elasticsearch API를 사용하여 전체 텍스트 검색 작업을 쉽게 수행할 수 있습니다.
위 내용은 ThinkPHP6에서 Elasticsearch 전체 텍스트 검색 작업을 어떻게 수행하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!