誰かがこの質問で私を助けることができるかどうか尋ねたいです
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
それぞれ (..名前で注文、価格で注文)
別のより良い、より速い方法はありますか?
助けてくれてありがとう。