2012-03-08 2 views
1

먼저, InnoDB는 리눅스에서 전체 텍스트 검색 인덱싱을 지원하지 않기 때문에 MyISAM 엔진을 사용하여 내 데이터를 저장합니다. 그러나 이것은 분명히 외연 적으로 적용되지는 않지만 외래 키를 사용합니다.외래 키에 포함 된 MySQL 전체 텍스트 검색 데이터

제조업체 (man_id, name), 모델 (model_id, man_id, name) 및 제품 (man_id, model_id, 요약, 설명)으로 구성된 3 개의 테이블이 있습니다.

제품 테이블에 대한 전체 텍스트 검색이 있지만 제조업체 이름과 모델 이름은 물론 요약 및 설명이 포함됩니다. 기본적으로 4 개의 필드를 검색합니다.

전체 텍스트 검색은 테이블의 열을 인덱싱 할 수 있고 외래 키 값을 인덱싱 할 수 없으므로 이러한 방식으로 작동하지 않습니다. 어떤 사람이 어떻게이 효과를 얻을 수 있는지에 대한 아이디어가 있습니까? 다음의 예와 같이

+0

InnoDB는 v5.6.4 기준으로 전체 텍스트 인덱스를 지원 2011/12/innodb-full-text-in-mysql-5-6-4/그럼 MyISAM 해결 방법을 버리고 원하는 경우 InnoDB를 사용할 수 있습니다. –

+0

@MarcB 사실입니다. 불행히도이 버전은 Microsoft 기반 서버의 개발 버전으로 만 릴리스되었습니다. Linux 기반 서버용 최신 버전 (v5.5)은 여전히이 기능을 가지고 있지 않습니다. 전체 텍스트 검색을 지원하는 InnoDB 데이터베이스라고하면 전체 텍스트 검색을 수행 할 때 쿼리에서 외래 키에 대한 참조를 어떻게 포함할까요? – leejmurphy

답변

1

당신은이 테이블에 가입하고 가입에 대한 검색을 실행할 수 있습니다 : http://blogs.innodb.com/wp/ :

CREATE TABLE `tablename` (
    `id` int(10) unsigned primary key AUTO_INCREMENT, 
    `stuff` text FULLTEXT KEY, 



) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

CREATE TABLE `table_b` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `stuff` text, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `index_table_b_on_text` (`stuff`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 


SELECT table_a.* 
FROM table_b JOIN table_a ON table_a.id = table_b.id 
WHERE MATCH(table_b.stuff) AGAINST ("hamster") 
     AND MATCH(table_a.stuff) AGAINST ("leopard"); 
+----+---------------------------------------------+ 
| id | stuff          | 
+----+---------------------------------------------+ 
| 3 | A brown leopard jumped over a lazy hamster. | 
+----+---------------------------------------------+ 
관련 문제