이 기사의 예에서는 PHP에서 스핑크스 전체 텍스트 검색을 활성화하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
스핑크스를 컴파일하고 설치할 때 중국어 깨짐 문자가 많이 나오더니 결국 오류가 나서 멈췄습니다. 공식 홈페이지에 가서 rpm 패키지를 직접 다운로드했는데 설치가 잘 안 됐어요. 개발에 바빠서 구체적인 오류에 대해서는 연구하고 싶지 않습니다.
두 개의 패키지를 설치합니다. 하나는 중국어 사전을 생성하는 프로그램인 mmseg이고, 다른 하나는 스핑크스의 중국어 버전인 csft입니다.
rpm -ivh 설치가 완료된 후 아주 순조롭게 진행되었습니다~~ 30분도 안되어 설치가 완료되었습니다.
한자사전 도서관, csft 공식 홈페이지에 직접 가서 다운받았는데, 정말 좋고, 사려 깊습니다.
unigram.txt uni.lib
unigram.txt 사전 텍스트로, 여기에 자신만의 키워드를 추가할 수 있습니다.
그런 다음 mmseg -u unigram.txt를 사용하여 사전 파일 unigram.txt.uni를 생성한 다음 uni.lib의 이름을 바꿉니다. 이것은 스핑크스가 알고 있는 사전입니다.
어디에 놓을까요? 나중에 설명할 sphinx.conf에서 구성한 사전 경로에 넣으면 거의 완료됩니다. 스핑크스의 몇 가지 실제 프로그램을 살펴보겠습니다.
[root@beihai365 /]# csft-
csft-indexer csft-search csft-searchd
csft-indexer는 전체 텍스트 검색 색인을 생성하는 프로그램입니다
csft-search는 검색이 효과적인지 테스트하는 데 사용되며 사용하기도 매우 쉽습니다. 아직 클라이언트 스크립트를 개발하지 않았으므로 이를 사용하여 전체 텍스트 검색이 성공하는지 확인할 수 있습니다.
csft-searchd 스핑크스 검색을 위한 데몬입니다. 시작한 후에는 php, python 등의 스크립트를 사용하여 쿼리를 시작할 수 있습니다.
그렇게 간단합니다. 두 가지 핵심 부분을 살펴보겠습니다.
sphinx.conf 구성 파일:
소스 tmsgs
{
유형 = mysql
sql_host = localhost
sql_user = 루트
sql_pass = 1
sql_db = phpwind75sp3
sql_port = 3306 # 선택 사항, 기본값은 3306
#sql_sock = /tmp/mysql3307.sock
sql_query_pre = 이름 설정 gbk
sql_query = pw_tools에서 ID, 이름, 유형, 재고 선택
#sql_attr_uint = ID
sql_attr_uint = 재고
}
색인 tmsgsindex
{
출처 = tmsgs
경로 = /var/mmseg/searchdata/beihai365
docinfo = 외부
charset_type = zh_cn.gbk
#min_prefix_len = 0
#min_infix_len = 2
#ngram_len = 2
charset_dictpath = /var/mmseg/data
#min_prefix_len = 0
#min_infix_len = 0
#min_word_len = 2
}
인덱서
{
mem_limit = 128M
}
검색됨
{
#듣기 = 3312
로그 = /var/log/searchd.log
query_log = /var/log/query.log
read_timeout = 5
max_children = 30
pid_file = /var/log/searchd.pid
max_matches = 1000
#seamless_rotate = 1
#preopen_indexes = 0
#unlink_old = 1
}
소스 tmsgs
{
유형 = mysql
sql_host = localhost
sql_user = 루트
sql_pass = 1
sql_db = phpwind75sp3
sql_port = 3306 # 선택 사항, 기본값은 3306
#sql_sock = /tmp/mysql3307.sock
sql_query_pre = 이름 설정 gbk
sql_query = pw_tools에서 ID, 이름, 유형, 재고 선택
#sql_attr_uint = ID
sql_attr_uint = 재고
}
인덱스 tmsgsindex
{
출처 = tmsgs
경로 = /var/mmseg/searchdata/beihai365
docinfo = 외부
charset_type = zh_cn.gbk
#min_prefix_len = 0
#min_infix_len = 2
#ngram_len = 2
charset_dictpath = /var/mmseg/data
#min_prefix_len = 0
#min_infix_len = 0
#min_word_len = 2
}
인덱서
{
mem_limit = 128M
}
검색
{
#듣기 = 3312
로그 = /var/log/searchd.log
query_log = /var/log/query.log
read_timeout read_timeout = 5
>
pid_file pid_file = /var/log/searchd.pid
max_matches = 1000
#seamless_rotate
#preopen_indexes ~
+
}
테스트 클라이언트 코드를 다시 살펴보세요.
코드 복사
$cl = 새로운 SphinxClient()
$cl->SetServer('localhost',3312)
$cl->SetMatchMode(SPH_MATCH_ALL)
$cl->SetArrayResult(true)
$res = $cl->Query("명함","*")
Print_r($res)
?>
header("Content-type:text/html;charset=utf-8")
'sphinxapi.php'를 포함하세요
$cl = 새로운 SphinxClient()
$cl->SetServer('localhost',3312)
$cl->SetMatchMode(SPH_MATCH_ALL)
$cl->SetArrayResult(true)
$res = $cl->Query("명함","*")
print_r($res)
?>
검색이 가능한지 확인하기 위해 사전에 "명함"이라는 키워드를 수동으로 추가해봤습니다.
코드 복사