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";

すべて正常に動作します。ご覧のとおり、私は多言語の Web サイトを持っているため、検索された表現がどの列で見つかったかを知る必要があります。たとえば、検索結果にサイトの英語版を表示するために、「textEN」列に「Solar system」という表現が見つかったことを知りたいです。

これを行う方法はありますか?

4

1 に答える 1

0

MATCH() ... AGAINST列ごとに個別に実行する必要があると思います(ただし、これの利点の 1 つは、全体のスコアに対する各列の貢献度を定量化できることです)。

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 に答える