Sphinx Engine


Setp 2 - Install

Install

  • 1) New VM
  • [New VM] RockyLinux85 => Copy vm
    [Network] eth0, VLAN_76
    [Memory] 4G


  • 2) Sphinx Install
  • eth0 - dhcp eth1 - ip : 192.168.71.76(Sphinx)


    [Sphinx]
    오픈소스의 검색엔진이다.

    https://sphinxsearch.com/downloads/current/
    Linux x64 binaries 다운로드
    sphinx-3.5.1-82c60cb-linux-amd64.tar.gz
    tar xvfp sphinx-3.5.1-82c60cb-linux-amd64.tar.gz -C /usr/local/
    ln -s /usr/local/sphinx-3.5.1/ /usr/local/sphinx
    mkdir /home/db/sphinx


    [sphinx.conf]

      source datasrc
      {
        type    = mysql
        sql_host  = localhost
        sql_user  = user
        sql_pass  = password
        sql_db    = dbname
        sql_port  = 3306
        sql_query_pre = SET NAMES utf8
        sql_query_pre = SET SESSION query_cache_type=OFF
        
        sql_query = SELECT pk as docid, title, content, name FROM TableName WHERE searchengine='Y';

        sql_field_string = title
        sql_field_string = content
        sql_field_string = name
      }

      source datadelta:datasrc
      {
        sql_query_pre = SET NAMES utf8
        sql_query = SELECT pk as docid, title, content, name FROM TableName WHERE searchengine='N';
        sql_query_post = UPDATE TableName SET searchengine='Y' WHERE searchengine='N'
        #sql_query_kbatch = SELECT pk FROM TableName WHERE searchengine='D'
      }

      index dataindex
      {
        source      = datasrc
        charset_table    = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
        min_infix_len    = 6 ## min_infix_len 는 '검색할 때 반드시 매칭되어야 하는 최소 문자 수'
        min_prefix_len    = 6
        ngram_len      = 1
        ngram_chars    = U+4E00..U+9FBB, U+3400..U+4DB5, U+20000..U+2A6D6, U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, U+FA29, U+3105..U+312C, U+31A0..U+31B7, U+3041, U+3043, U+3045, U+3047, U+3049, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3063, U+3066, U+3068, U+306A..U+306F, U+3072, U+3075, U+3078, U+307B, U+307E..U+3083, U+3085, U+3087, U+3089..U+308E, U+3090..U+3093, U+30A1, U+30A3, U+30A5, U+30A7, U+30A9, U+30AD, U+30AF, U+30B3, U+30B5, U+30BB, U+30BD, U+30BF, U+30C1, U+30C3, U+30C4, U+30C6, U+30CA, U+30CB, U+30CD, U+30CE, U+30DE, U+30DF, U+30E1, U+30E2, U+30E3, U+30E5, U+30E7, U+30EE, U+30F0..U+30F3, U+30F5, U+30F6, U+31F0, U+31F1, U+31F2, U+31F3, U+31F4, U+31F5, U+31F6, U+31F7, U+31F8, U+31F9, U+31FA, U+31FB, U+31FC, U+31FD, U+31FE, U+31FF, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9, U+A000..U+A48C, U+A492..U+A4C6
      }

      index RTdata
      {
        type      = rt
        rt_mem_limit  = 1024M

        rt_attr_string  = title
        rt_attr_string  = content

        rt_field  = title
        rt_field  = content

        charset_table  = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
        min_infix_len  = 2
        ngram_len    = 1
        ngram_chars  = U+4E00..U+9FBB, U+3400..U+4DB5, U+20000..U+2A6D6, U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, U+FA29, U+3105..U+312C, U+31A0..U+31B7, U+3041, U+3043, U+3045, U+3047, U+3049, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3063, U+3066, U+3068, U+306A..U+306F, U+3072, U+3075, U+3078, U+307B, U+307E..U+3083, U+3085, U+3087, U+3089..U+308E, U+3090..U+3093, U+30A1, U+30A3, U+30A5, U+30A7, U+30A9, U+30AD, U+30AF, U+30B3, U+30B5, U+30BB, U+30BD, U+30BF, U+30C1, U+30C3, U+30C4, U+30C6, U+30CA, U+30CB, U+30CD, U+30CE, U+30DE, U+30DF, U+30E1, U+30E2, U+30E3, U+30E5, U+30E7, U+30EE, U+30F0..U+30F3, U+30F5, U+30F6, U+31F0, U+31F1, U+31F2, U+31F3, U+31F4, U+31F5, U+31F6, U+31F7, U+31F8, U+31F9, U+31FA, U+31FB, U+31FC, U+31FD, U+31FE, U+31FF, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9, U+A000..U+A48C, U+A492..U+A4C6
      }

      indexer
      {
        mem_limit = 1024M
      }

      searchd
      {
        listen    = 9312
        listen    = 9306:mysql41
        read_timeout  = 5
        max_children  = 30
        seamless_rotate  = 1
        preopen_indexes  = 1
        unlink_old  = 1
        workers    = threads # for RT to work
        pid_file  = /path/db/sphinx/searchd.pid
      }
    # index DATAJOIN
    # {
    #   type = distributed
    #   agent = 127.0.0.1:9312:DATAINDEX001
    #   agent = 127.0.0.1:9312:DATAINDEX002
    # }

      common {
        datadir = /path/db/sphinx
      }

    [start.sh]
    #!/bin/bash
    if [ -e "/path/db/sphinx/searchd.pid" ]
    then
       echo "Running Sphinx ... ";
    else
       /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
    fi

    [stop.sh]
    #!/bin/bash
    /usr/local/sphinx/bin/searchd --stop --config /usr/local/sphinx/etc/sphinx.conf

    [Setting]
    /bin/cp -rf sphinx.conf /usr/local/sphinx/etc/sphinx.conf
    /bin/cp -rf start.sh /usr/local/sphinx/bin/start.sh
    /bin/cp -rf stop.sh /usr/local/sphinx/bin/stop.sh


    [crontab full indexer]
    #!/bin/bash
    /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all --rotate
    [crontab delta indexer]
    #!/bin/bash
    ## 증분 index
    /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf INDEXDATA_DELTA --rotate
    ## merge 실행
    /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --merge INDEXDATA INDEXDATA_DELTA --rotate

    [root@localhost ~]# mysql -h0 -P9306
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 3.5.1 (commit 82c60cb)

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MySQL [(none)]> show tables;
    +--------------+-------------+
    | Index            | Type        |
    +--------------+-------------+
    | DATAJOIN       | distributed |
    | DATAINDEX001 | local |
    | DATAINDEX001 | local |
    | dataindex        | local |
    | RTdata            | rt     |
    +--------------+-------------+
    5 rows in set (0.001 sec)

    MySQL [(none)]>