3

誰かがこの質問で私を助けることができるかどうか尋ねたいです

SELECT count(MATCH(product_text) AGAINST('lorem*' in boolean mode)) AS score FROM table_products WHERE MATCH (text) AGAINST ('lorem*' in boolean mode) limit 0,50000

列テキストには全文索引があります。行の合計をスコアとして返すクエリです。私が気にしないのは、全文検索結果を数えることです。結果(行)の数が50000より大きい場合は、count-sum 50000が返されます。それ以外の場合は、結果の正確なカウントが返されます。

問題は、たとえば「lorem」という単語をユーザーが検索しようとして、この単語が500 000 xを超えてテーブルに表示された場合、テーブル幅150万行では高速ではないことです。

私もやってみました

SELECT id,name,product_text,price, MATCH(product_text) AGAINST('lorem*' in boolean mode) AS score FROM table_products WHERE MATCH(product_text) AGAINST('lorem*' in boolean mode) and show_product='1' limit 0,50000

...幅phpmysql_num_rows

別の問題は、次のクエリでmysqlがフルテキストインデックスのみを使用し、別の列またはスコアで並べ替えるのが遅いことです。

SELECT id,name,product_text,price, MATCH(product_text) AGAINST('lorem*' in boolean mode) AS score FROM table_products WHERE MATCH(product_text) AGAINST('lorem*' in boolean mode) and show_product='1' order by score desc limit 0,50000

それぞれ (..名前で注文、価格で注文)

別のより良い、より速い方法はありますか?

助けてくれてありがとう。

4

0 に答える 0