2011-03-02 4 views
1

전체 텍스트 검색을 수행 할 수있는 테이블이 있습니다. 그러나 검색 용어에 대한 조회가 발생하지 않습니다.MySQL fulltext 검색을 할 수 없습니다.

mysql> SELECT id, raw_content FROM transcripts; 
+----+-------------+ 
| id | raw_content | 
+----+-------------+ 
| 1 | foo   | 
+----+-------------+

를 실행 한 다음 찾아 행이 있음을

mysql> SHOW TABLE STATUS LIKE 'transcripts'; 
+-------------+--------+---------+------------+-------------------+----------+----------------+ 
| Name  | Engine | Version | Row_format | Collation   | Checksum | Create_options | 
+-------------+--------+---------+------------+-------------------+----------+----------------+ 
| transcripts | MyISAM |  10 | Dynamic | latin1_swedish_ci |  NULL |    | 
+-------------+--------+---------+------------+-------------------+----------+----------------+ 

mysql> DESCRIBE transcripts; 
+-------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+----------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| content  | text  | YES |  | NULL |    | 
| raw_content | text  | YES | MUL | NULL |    | 
| tape_id  | int(11) | YES |  | NULL |    | 
| state  | int(11) | YES |  | 0  |    | 
| created_at | datetime | YES |  | NULL |    | 
| updated_at | datetime | YES |  | NULL |    | 
+-------------+----------+------+-----+---------+----------------+ 

mysql> SHOW INDEXES FROM transcripts; 
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+ 
| Table  | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | 
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+ 
| transcripts |   0 | PRIMARY   |   1 | id   | A   |   2 |  NULL | NULL |  | BTREE  | 
| transcripts |   1 | raw_content_index |   1 | raw_content | NULL  |  NULL |  NULL | NULL | YES | FULLTEXT | 
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+

증명 :

여기에 (내가 확신이 중요하지 않은 나는 몇 열을했다)처럼 내 테이블 모습입니다 여기에 검색을 작동시키려는 시도가 있습니다.

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo'); 
Empty set (0.00 sec) 

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo' IN BOOLEAN MODE); 
Empty set (0.00 sec) 

mysql> SELECT id FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo' IN NATURAL LANGUAGE MODE); 
Empty set (0.00 sec) 

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('+foo*' IN BOOLEAN MODE); 
Empty set (0.00 sec)

내가 뭘 잘못하고 있니? 기본 전체 텍스트로

+2

기본적으로 fulltext는 3 자 이하의 문자를 무시합니다. – Cfreak

+0

바입니다. @Cfreak입니다. 답변으로 게시 할 수 있습니까? 부울 모드는 더 긴 검색을 사용하여 검색합니다. – muirbot

+1

부울 모드가 없으면 적어도 50 %의 레코드에있는 단어를 검색하면 무시됩니다. 자세한 내용은 여기에 http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html 안부;) –

답변

4

다른 것을 고려하는 것입니다 세 이하 자

(지금의 요청에 의해 답변으로 게시 :)) 여기

3

와 단어를 무시 :

에만 변경할 수 없습니다 기본 길이이지만 스톱 워드 목록을 변경할 수도 있습니다. MySQL이 인덱스 this list of 543 words을 인덱싱하지 않기 때문에 중지 단어를 변경할 수 있습니다. 자신 만의 중계 대 단어 목록을 만들고 최소 단어 길이를 변경하십시오.

1 단계) 자신의 스톱 워드 목록을 만듭니다. 'a', 'an'및 'the'를 추가 할 수 있습니다.

에코 "A"> /var/lib/mysql/custom_stopwords.txt
에코 "는">> /var/lib/mysql/custom_stopwords.txt
에코 "를">>은/var/LIB/mysql을/custom_stopwords.txt

2 단계) /etc/my.cnf에이 옵션을 추가

ft_min_word_len = 2
ft_stopword_file =은/var/lib 디렉토리/mysql을/custom_stopwords.txt

3 단계) 서비스 MySQL 재시작

4 단계) 새로운 FULLTEXT 색인을 만드십시오. mysql을 다시 시작하기 전에 기존 FULLTEXT 인덱스를 다시 인덱싱해야합니다.

사용해보기 !!!

+0

매우 도움이 감사합니다! – muirbot

관련 문제