2014-12-05 5 views
0

테이블을 보유하고 있으며 (prenom, nom) 필드에 전체 텍스트 인덱스를 결합하여 적용했습니다. 다음은 해당 테이블의 데이터입니다.Fulltext 검색이 제대로 작동하지 않습니다.

persID prenom  nom (pers table) 
-------------------------------- 
116 te   te 
117 te test  test te 

지금, 나는 MATCH 및 반대 를 사용하여 레코드 위에 가져 오기 위해 노력했다. 아래는 나의 질문입니다.

SELECT `Pers`.`persID`, Pers.prenom, Pers.nom FROM `bdrplus`.`pers` AS `Pers` LEFT JOIN `bdrplus`.`pers_detail` AS `PersDetail` ON (`PersDetail`.`persID` = `Pers`.`persID`) WHERE `Pers`.`etat` =1 AND `Pers`.`persID` !=55 AND MATCH(`Pers`.`prenom`, `Pers`.`nom`) AGAINST('te*' IN BOOLEAN MODE) Result ------------------------ persID prenom nom 117 te test test te 

이제 I MySQL을 LIKE (% .. %) 연산자를 사용하여 시도. 아래는 제가 시도한 쿼리입니다. 나는 전체 텍스트 인덱스 쿼리
조작을 상대로 MATCH를 사용하여 두 기록을 못하고있는 이유

SELECT `Pers`.`persID` 
FROM `bdrplus`.`pers` AS `Pers` 
LEFT JOIN `bdrplus`.`pers_detail` AS `PersDetail` 
    ON (`PersDetail`.`persID` = `Pers`.`persID`) 
WHERE `Pers`.`etat` =1 
AND `Pers`.`persID` !=55 
AND (Pers.prenom LIKE 'te%' OR Pers.nom LIKE 'te%') 

Result 
----------------------- 
persID prenom  nom (pers table) 
116 te   te 
117 te test  test te 

이해가 안 돼요?

답변

0

전체 텍스트 검색은 설정이 거의없고 ft_min_word_len이고 기본값은 4로 설정됩니다. 숫자를 변경하지 않으면 4 자 미만의 단어는 고려되지 않습니다. 귀하의 경우에는

는 당신이

MATCH(Pers.prenom, Pers.nom) AGAINST('te*' IN BOOLEAN MODE)

및이 있기 때문에 올바른 결과를 반환의 te testtest te 일치

다음 명령

show variables like 'ft_%';

를 사용하여 ft_mn_word_len를 확인하실 수 있습니다

필요한 경우 기본 값보다 작게 설정하고 단어 길이 2를 고려하여 해당 값을 변경해야합니다.에서

데비안/우분투 OS 보통

/etc/mysql

아래에있는 파일의 위치 인 my.cnf 파일을 업데이트하여 ft_min_word_len의 가치를 따라서 위 폴더로 이동 유형을 변경할 수 있습니다

sudo vi my.cnf

그런 다음 파일에서 블록 [mysqld]을 확인하고 변수가 이미 존재하는지 확인하십시오. ST는 라인이 저장

ft_min_word_len = 2

및 다시 시작 mysql을 추가

sudo /etc/init.d/mysql restart

또는

sudo service mysql restart

이미 전에 테이블에 전체 텍스트 인덱스를 가지고 있다면 위의 작업을 수행 한 후 위의 변경 후 인덱스를 삭제하고 다시 내장 또는

repair table table_name quick

+0

하이로 MySQL 터미널에서 뭔가 수리에게 표를 할 수있다, 나는 위의 해결책 시도하지만 여전히 – Jimit

+0

를 작동하지 않는 당신의 초'ft_min_word_len', 당신은 변경 후 mysql을 다시 시작 않았다 무엇입니까? 또한 변경 후 색인을 삭제하고 다시 작성해야합니다. 또는 테이블을 수리해야합니다. 또한 mysql 전체 텍스트 검색에는 정지 단어 목록이 있습니다. http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html –

+0

Windows를 사용하고 있으므로 my.ini를 체크인했습니다. ft_min_word_len을 사용할 수 없습니다. 나는 그것을 추가하고 그것을 2로 지정한 다음 mysql을 다시 시작하고 전체 텍스트 인덱스를 다시 색인화한다. – Jimit