2013-07-20 3 views
0

MySQL 데이터베이스에서 전체 텍스트 색인을 설정했지만 불행히도 결과가 반환되지 않습니다.MySQL 전체 텍스트 검색 결과 0 반환

이것은 일반적인 문제인 것처럼 보입니다. 일반적인 대답은 MyISAM 엔진과 '부랑연 모드'기능입니다. 그럼 둘 다 나에게 효과가있는 것 같습니다.

DROP TABLE IF EXISTS parentregionlist; 
CREATE TABLE parentregionlist 
(
    RegionID INT NOT NULL, 
    RegionType VARCHAR(50), 
    RelativeSignificance VARCHAR(3), 
    SubClass VARCHAR(50), 
    RegionName VARCHAR(255), 
    RegionNameLong VARCHAR(510), 
    ParentRegionID INT, 
    ParentRegionType VARCHAR(50), 
    ParentRegionName VARCHAR(255), 
    ParentRegionNameLong VARCHAR(510), 
    CountryCode VARCHAR(2), 
    TimeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (RegionID), 
    FULLTEXT (RegionNameLong) 
) ENGINE = MyISAM; 

INSERT INTO parentregionlist 
VALUES (575, 
"City", 
"", 
"", 
"Birmingham", 
"Birmingham, England, United kingdom", 
6023342, 
"Multi-City (Vicinity)", 
"Birmingham (and Vicinity)", 
"Birmingham (and vicinity), England, United Kingdom", 
"", 
now()); 

SELECT * 
FROM parentregionlist 
WHERE MATCH(regionnamelong) 
AGAINST ('Birm' IN BOOLEAN MODE); 

어떤 아이디어 : 여기

내 예제 코드인가?

P. 실제 테이블에는 200k + 행이 있습니다. 검색이 단 한 행으로는 작동하지 않는다는 것을 알고 있습니다. 단지 예일뿐입니다.

답변

0

현재 검색어로 전체 단어 일치를 찾고 있습니다. 인스턴스 위에서 삽입 보여 행을 얻을 수 있도록 그래서, 당신이해야 할 것입니다 : 당신이 'Birm'로 시작하는 모든 결과에 대해 검색 할 경우

SELECT * 
FROM parentregionlist 
WHERE MATCH(regionnamelong) 
AGAINST ('Birmingham (and vicinity), England, United Kingdom' IN BOOLEAN MODE); 

을하지만 당신은 '*'수정을 추가해야합니다 :

SELECT * 
FROM parentregionlist 
WHERE MATCH(regionnamelong) 
AGAINST ('Birm*' IN BOOLEAN MODE); 

또는 당신은 또한 LIKE를 사용할 수 있습니다

SELECT * 
FROM parentregionlist 
WHERE regionnamelong LIKE 'Birm%'; 

MySQL의 워드 프로세서가주는 좋은 MATCH 예제에서 작업 : http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html