2013-10-27 1 views
0

나는 실시간 인덱스에 내 원래 스핑크스 인덱스를 변환하려면이 자습서를 사용 :오류 실시간 인덱스에 스핑크스의 원래 인덱스를 변환 한 후

source movies_dev 
{ 
    type       = mysql 

    sql_host      = localhost 
    sql_user      = ******** 
    sql_pass      = ******** 
    sql_db       = ******** 
    sql_sock      = /var/run/mysqld/mysqld.sock 
    sql_port      = 3306 

    sql_query      = \ 
      SELECT \ 
        CRC32(movie_id) AS id, movie_id, format_id, active, year, title \ 
      FROM \ 
        movie; 
    sql_attr_uint     = format_id 
    sql_attr_uint     = active 
    sql_attr_uint     = year 
    sql_field_string     = movie_id 
    sql_field_string     = title 

    sql_query_info   = SELECT * FROM movie WHERE CRC32(movie_id)=$id 
    sql_query_pre = SET NAMES utf8 
} 

index movies_dev 
{ 
    source     = movies_dev 
    path     = /var/data/sphinx/movies_dev 
    morphology    = stem_en 
    enable_star = 1 
    min_word_len   = 3 
    min_prefix_len   = 0 
    min_infix_len   = 3 
    charset_type = utf-8 
    charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+DC->U+FC, U+C4->U+E4, U+D6->U+F6, U+DF, U+E4, U+F6, U+FC 
} 

index rt_movies_dev 
{ 
    type     = rt 
    rt_mem_limit   = 32M 

    path     = /var/data/sphinx/rt_movies_dev 
    charset_type   = utf-8 

    rt_field     = movie_id 
    rt_field     = title 
    rt_attr_uint     = format_id 
    rt_attr_uint     = year 
    rt_attr_uint     = active 
} 

source attach_movies_dev 
{ 
    type     = mysql 

    sql_host    = localhost 
    sql_user    = ******** 
    sql_pass    = ******** 
    sql_db     = ******** 

    sql_query    = SELECT 1 FROM rt_movies_dev 
    sql_query_post   = ATTACH INDEX movies_dev TO RTINDEX rt_movies_dev 
} 

index attach_movies_dev 
{ 
    source     = attach_movies_dev 
    path     = /var/data/sphinx/attach_movies_dev 
    docinfo     = extern 
    charset_type   = utf-8 
} 

I : 내 sphinx.conf을 변경

http://www.ivinco.com/blog/converting-sphinx-original-indexes-to-real-time-indexes/ 은 "rt_movies_dev"테이블 생성 :

,369 : 그 후

SET NAMES utf8; 
SET foreign_key_checks = 0; 
SET time_zone = '+01:00'; 
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; 

DROP TABLE IF EXISTS `rt_movies_dev`; 
CREATE TABLE `rt_movies_dev` (
    `movie_id` varchar(20) NOT NULL, 
    `format_id` int(10) NOT NULL, 
    `title` varchar(255) NOT NULL, 
    `year` int(20) DEFAULT NULL, 
    `active` tinyint(1) NOT NULL, 
PRIMARY KEY (`movie_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

을, 나는이 세 가지 명령을 실행

[email protected]:~# /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf; 
[email protected]:~# /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf movies_dev --rotate; 
[email protected]:~# /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf attach_movies_dev; 

첫 번째 두 명령 다음에 오류가 없습니다 (자습서에서와 같은 경고 제외).

ERROR: index 'attach_movies_dev': No fields in schema - will not index. 

나는 오류가 말한다 정확히 모르는 내가 도움이 아무것도 찾을 수 : 그러나 마지막 명령이 발생합니다. 뭐가 잘못 됐는지 말해 줄 수있어? 나는 여기 붙어있다.

답변

0

먼저 attach_movies_dev source는 mysql이 아니라 SPHINX에 연결합니다. 그래서 mysql 테이블은 필요 없다.

SphinxQL 명령을 호출하기 위해 인덱서를 사용하고 있습니다.

하지만 인덱스에 첨부 인덱스를 시도하고 볼 수 있습니다 무엇 RT 지수 자체는 비어 있어야하기 때문에, 항상 오류가 발생합니다에서

(그래서에 디스크 인덱스를 첨부 할 수 있습니다!)

그래서 변경하려면 findd에 대신 연결하는 색인을 첨부하십시오. 그리고 더 잘 작동 할 것입니다. 빈 RT 인덱스 일 가능성이 높습니다. 인덱서는 빈 인덱스를 만들지 만, 중요한 것은 여전히 ​​_post 명령을 실행합니다. 인덱스가 존재하는 이유는 무엇입니까!

디스크 색인과 RT 색인은 서로 다른 필드를 가지고 있으며, 디스크 색인에 두 개의 속성 AND 필드를 만드는 sql_field_string이 있습니다. 따라서 RT 인덱스는 필드가 아닌 두 개의 문자열 특성을 포함해야합니다.

+0

우선, 답변 해 주셔서 감사합니다. 하지만 "빈 RT 인덱스"를 만드는 방법을 알려주시겠습니까? 구성 파일에서 "rt_field"및 "rt_attr_unit"을 삭제해야한다는 의미입니까? 또한 "그래서 검색 색인에 연결하여 검색 색인에 연결하십시오."라고 썼습니다. 어떻게 구현할 수 있습니까? Sphinx에서 나는 너무나 미안하다. – davkraid