我试图用MATCH ... AGAINST
WHERE
子句过滤一些数据。但我得到以下错误:
找不到与列列表匹配的FULLTEXT索引
这是我执行的一个查询:
SELECT PAR.idPartij,
PAR.Partijnaam,
PRO.Productnaam,
PER.Perceel,
R.Ras,
PAR.TagNR
FROM Partij AS PAR
LEFT OUTER JOIN Product AS PRO ON PAR.idProduct = PRO.idProduct
LEFT OUTER JOIN Ras AS R ON PAR.idRas = R.idRas
LEFT OUTER JOIN Klasse AS K ON PAR.idKlasse = K.idKlasse
LEFT OUTER JOIN Perceel AS PER ON PAR.idPerceel = PER.idPerceel
LEFT OUTER JOIN Maat AS M ON PAR.idMaat = M.idMaat
LEFT OUTER JOIN Teler AS T ON PAR.idTeler = T.idTeler
LEFT OUTER JOIN Handelshuis AS H ON PAR.idHandelshuis = H.idHandelshuis
LEFT OUTER JOIN Behandeling AS BH ON PAR.idBehandeling = BH.idBehandeling
WHERE PAR.Actief <> 0
AND (
MATCH(PAR.idPartij) AGAINST ('%1423%' IN BOOLEAN MODE)
OR MATCH(PAR.Partijnaam) AGAINST ('%1423%' IN BOOLEAN MODE)
OR MATCH(PRO.Productnaam) AGAINST ('%1423%' IN BOOLEAN MODE)
OR MATCH(PER.Perceel) AGAINST ('%1423%' IN BOOLEAN MODE)
OR MATCH(R.Ras) AGAINST ('%1423%' IN BOOLEAN MODE)
OR MATCH(PAR.TagNR) AGAINST ('%1423%' IN BOOLEAN MODE)
)
ORDER BY PAR.idPartij
正如你所看到的,我是不是像Dan Grossman所说的那样,在AGAINST
中使用IN BOOLEAN MODE
来克服这个问题,但它不起作用。
我是错过了什么,还是我做得完全错了?
有一点需要注意的是,select(以及MATCH部分)是在PHP
boolean mode
不起作用的原因可能有很多
就像您拥有的mysql版本一样,
存储引擎等
然而,强烈建议在执行match .. against
时使用全文索引,因为这就是它的用途。
现在说到这里,它会不会把其他索引搞砸,不会,你的id是主键,它总是索引。您也可以对其他列使用常规索引。