mysql全文搜索中的奇怪相关性错误

时间:2012-02-08 15:42:42

标签: mysql full-text-search

我正在使用查询按相关性排序结果。

有时它正在发挥作用:

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;

1 个答案:

答案 0 :(得分:0)

使用它解决了Wrikken评论中的问题:

  

SELECT baslik,MATCH(baslik)AGAINST('“Satılıkev”'in BOOLEAN   MODE)as rank FROM(kategoriler)WHERE MATCH(baslik)AGAINST   ('+ merkez *'在布尔模式下)AND ozellik = 0 ORDER BY rank desc