1

这是我的查询:

$sql = "SELECT *
          MATCH(textEN,textDE,textPT,titlePT,titleDE,titleEN) AGAINST('$search') AS score
          FROM $main_db.ff_pages
        WHERE MATCH(textEN,textDE,textPT,titlePT,titleDE,titleEN) AGAINST('$search')
        ORDER BY score DESC";

一切正常。如您所见,我有一个多语言网站,这就是为什么我需要知道在哪些列中找到了搜索表达式。例如,我想知道在“textEN”列中找到了“Solar system”这个表达,以便在搜索结果中显示该网站的英文版本。

有没有办法做到这一点?

4

1 回答 1

0

我认为您必须分别MATCH() ... AGAINST为每一列执行(尽管这样做的一个优点是您可以量化每列对总分的贡献)。

最大限度地利用 MySQL 相关性分数的附加性质及其对确定性函数的缓存,我会这样做:

SELECT   *,
         MATCH(textEN)  AGAINST('$search') AS score_textEN,
         MATCH(textDE)  AGAINST('$search') AS score_textDE,
         MATCH(textPT)  AGAINST('$search') AS score_textPT,
         MATCH(titleEN) AGAINST('$search') AS score_titleEN,
         MATCH(titleDE) AGAINST('$search') AS score_titleDE,
         MATCH(titlePT) AGAINST('$search') AS score_titlePT,
FROM     $main_db.ff_pages
WHERE    MATCH(textEN)  AGAINST('$search')
      OR MATCH(textDE)  AGAINST('$search')
      OR MATCH(textPT)  AGAINST('$search')
      OR MATCH(titleEN) AGAINST('$search')
      OR MATCH(titleDE) AGAINST('$search')
      OR MATCH(titlePT) AGAINST('$search')
ORDER BY score_textEN  + score_textDE  + score_textPT
         score_titleEN + score_titleDE + score_titlePT DESC
于 2012-05-22T19:45:16.883 回答