>백엔드 개발 >PHP 튜토리얼 >php_php에서 스핑크스 전체 텍스트 검색을 활성화하는 방법 팁

php_php에서 스핑크스 전체 텍스트 검색을 활성화하는 방법 팁

WBOY
WBOY원래의
2016-05-16 20:27:421162검색

이 기사의 예에서는 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()
코드 복사
코드는 다음과 같습니다.
배열   
(   
    [오류] =>    
    [경고] =>    
    [상태] => 0   
    [필드] => 배열   
        (   
            [0] => 이름   
            [1] => 유형   
        )   
  
    [속성] => 배열   
        (   
            [재고] => 1   
        )   
  
    [일치] => 배열   
        (   
            [0] => 배열   
                (   
                    [ID] => 8   
                    [무게] => 1   
                    [속성] => 배열   
                        (   
                            [재고] => 100   
                        )   
                )   
        )   
    [합계] => 1   
    [total_found] => 1   
    [시간] => 0.018   
    [단어] => 배열   
        (   
            [명칭] => 배열   
                (   
                    [문서] => 1   
                    [조회수] => 1   
                )   
        )   
)  
배열
(
    [오류] => 
    [경고] => 
    [상태] => 0
    [필드] => 배열
        (
            [0] => 이름
            [1] =>
를 입력하세요         )
    [속성] => 배열
        (
            [재고] => 1
        )
    [일치] => 배열
        (
            [0] => 배열
                (
                    [ID] => 8
[무게] = & gt; 1
[attrs] => 배열
> [재고] => 100
)                                             )
)
[전체] => 1
[total_found] => 1
[시간] => 0.018
[단어] => 배열
(
[이름 카드] = & 배열
                                                                                  [문서] = & gt; 1
[히트] = & GT 1
)
)
)

전혀 문제 없습니다. 몇 가지 주요 작업이 검색되었습니다.
[root@beihai365 /]# csft-searchd --stop 검색 가드 중지

[root@beihai365 /]# csft-indexer --all 모든 노드에 대한 인덱스를 생성합니다. 다음과 같이 특정 노드에 대한 인덱스를 생성할 수도 있습니다. csft-indexer xx
[root@beihai365 /]# csft-search 앱 검색 키워드 앱인데 아래 정보를 보면 검색된 문서도 없고 적중된 문서도 없습니다.

Coreseek 전체 텍스트 서버 3.1

저작권 (c) 2006-2008 coreseek.com

구성 파일 './csft.conf' 사용 중...

1,
pt:1, 1; 인덱스 'tmsgsindex': 'App' 쿼리: 0.017초 내에 총 0개의 일치 항목 0개를 반환했습니다.
단어:
1. '앱': 문서 0개, 조회수 0개
이 명령을 실행할 때 --config sphinx.conf 구성 파일에 대한 경로를 수동으로 고정해야 한다는 것을 알게 되는데, 이는 매우 불편하므로 ./에 하나를 ln -s로 입력하면 됩니다. --config.

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

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