2013-07-20 3 views
0

Я только что установил полный текстовый индекс в моей базе данных MySQL, но, к сожалению, он не возвращает никаких результатов.MySQL Full Text Search Возврат 0 Результаты

Это, как представляется, обычная проблема, и в типичных ответах используется механизм MyISAM и функция IN BOOLEAN MODE. Ну, ни одна из них, похоже, не работает для меня.

Вот мой пример кода:

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.S. В реальной таблице у меня есть 200k + строк. Я знаю, что поиск не будет работать только с одной строкой, это просто пример.

ответ

0

С текущим запросом вы ищете полное совпадение слов. Так, например, чтобы получить строку, вы показываете вставлены выше, вам нужно будет сделать:

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

Однако, если вы хотите найти все результаты, которые начинаются с «Birm» вам нужно будет добавить «*» модификатора :

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

Смежные вопросы