2012-02-08 71 views
0

我正在使用查詢按相關性排序結果。mysql全文搜索奇怪的相關性錯誤

有時它的工作:

SELECT `baslik` , MATCH (baslik) AGAINST ('"konut ev"') as rank 
FROM (`kategoriler`) 
WHERE MATCH (baslik) AGAINST ('+merkez*' in boolean mode) 
AND `ozellik` = 0 ORDER BY `rank` desc 

結果:

baslik       rank desc 
Merkez Mahalle Satılık Ev K... 1.43379247188568 
Merkez Mahalle Satılık Ev K... 1.43379247188568 
Merkez Mahalle Satılık Ev Kon... 1.43379247188568 
Merkez Mahalle Kiralık Ev Kon... 1.43379247188568 
Merkez Mahalle     0 
Merkez Mahalle Satılık   0 
Merkez Mahalle Satılık ...   0 

但有時它不是:

SELECT `baslik` , MATCH (baslik) AGAINST ('"Satılık ev"') as rank 
FROM (`kategoriler`) 
WHERE MATCH (baslik) AGAINST ('+merkez*' in boolean mode) 
AND `ozellik` = 0 ORDER BY `rank` desc 

結果:

baslik     rank 
Merkez Mahalle   0 
Merkez Mahalle Satılık 0 
Merkez Mahalle Satılık ... 0 
Merkez Mahalle Satılık ... 0 
Merkez Mahalle   0 
Merkez Mahalle Satılık 0 
Merkez Satılık Ev K... 0 

可能是什麼原因?以及如何解決這個問題?

表結構:

CREATE TABLE IF NOT EXISTS `kategoriler` (
    `baslik` varchar(200) character set utf8 collate utf8_turkish_ci NOT NULL, 
    `id` mediumint(5) unsigned NOT NULL, 
    `kategori` tinyint(1) unsigned NOT NULL, 
    `sayi` smallint(5) unsigned NOT NULL, 
    PRIMARY KEY (`baslik`), 
    FULLTEXT KEY `baslik` (`baslik`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
+0

最有可能的是,'Satılıkev'在表格的50%以上。 – Wrikken 2012-02-08 15:45:08

+0

其實第一個例子「konut ev」有更多的行,然後是「Satılıkev」 – motto 2012-02-08 15:51:41

+0

好吧,'ev'很可能被忽略,因爲它的<4個字符,除非你另外配置了MySQL。多少行包含'Satilik'?但是你也可以爲排名使用布爾搜索模式,省卻很多麻煩。 – Wrikken 2012-02-08 16:00:30

回答

0

使用此解決了這個問題,如Wrikken的評論:

選擇baslik,MATCH(baslik)AGAINST( ' 「SatılıkEV」' IN BOOLEAN MODE)作爲等級FROM(kategoriler)匹配(baslik)反對 ('+ merkez *'布爾模式)AND ozellik = 0 ORDER BY rank desc