전체검색 게시판출력
본문
답변 2
참고하셔서 원하시는 형식으로 구현하시면 되지 않을까 합니다.
Elasticsearch-PHP 라이브러리 설치
composer require elasticsearch/elasticsearch
<?php
require 'vendor/autoload.php';
// Elasticsearch 연결 설정
$hosts = [
[
'host' => 'localhost',
'port' => 9200,
],
];
$client = Elasticsearch\ClientBuilder::create()
->setHosts($hosts)
->build();
// 인덱스 생성 (실제로는 필요에 따라 이미 생성된 인덱스를 사용해야 합니다.)
$indexParams = [
'index' => '게시판인덱스',
'body' => [
'settings' => [
'number_of_shards' => 1,
'number_of_replicas' => 0,
],
],
];
$client->indices()->create($indexParams);
// 게시판 데이터 샘플 입력
$게시판데이터 = [
['게시판이름' => '기술게시판', '게시판내용' => '프로그래밍 관련 정보 공유'],
['게시판이름' => '여행게시판', '게시판내용' => '여행지 추천과 경험 공유'],
['게시판이름' => '요리게시판', '게시판내용' => '레시피 공유와 요리 팁'],
];
// Elasticsearch에 데이터 색인
foreach ($게시판데이터 as $idx => $data) {
$params = [
'index' => '게시판인덱스',
'type' => '_doc',
'id' => $idx + 1,
'body' => $data,
];
$client->index($params);
}
// 전체검색 함수
function 전체검색($연관단어)
{
global $client;
// Elasticsearch 쿼리 작성
$검색쿼리 = [
'index' => '게시판인덱스',
'body' => [
'query' => [
'multi_match' => [
'query' => $연관단어,
'fields' => ['게시판이름', '게시판내용'],
],
],
],
];
// Elasticsearch에서 검색 실행
$검색결과 = $client->search($검색쿼리);
// 검색 결과 반환
return $검색결과['hits']['hits'];
}
// 사용자가 입력한 연관단어
$사용자입력 = '기술';
// 전체검색 실행
$결과 = 전체검색($사용자입력);
// 결과 출력 또는 처리
foreach ($결과 as $hit) {
print_r($hit['_source']);
}
!-->!-->
새 글 게시판에서 구현을 하거나 새글 게시판은 일정 기간만 보관을 해서 새 글 게시판과 같이 통합된 정보를 저장하는 테이블을 만들고 해당에서 검색을 하셔야 합니다. 그누는 다 따로 테이블이 있어서 조인으로 합쳐서 하기에는 힘듭니다.
답변을 작성하시기 전에 로그인 해주세요.