1

車などの製品のテーブルがあります。オートコンプリートなど、ユーザーが複数の用語を使用して検索できるようにしたい。LIKE %term% は巨大なテーブルなので遅くなります。高速化するために、MySQL の全文検索を使用したいと考えています。ft_min_word_length = 1 を使用します。

商品名が「レクサス RX450H」だとします。次に、「Lexus」と「RX450H」の 2 つの単語が索引付けされます。

MATCH (productname) AGAINST ('+lex* +rx45*' IN BOOLEAN MODE) ')

..この製品と一致します、良いです。

しかし

MATCH (productname) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')

単語の先頭で検索することが不可欠であるため、そうではありません。

ユーザーは数字を知っているかもしれませんが、文字を忘れているかもしれません。2 番目のクエリが一致するようにします。

製品が「Lexus RX 450 H」の場合、最後のクエリが一致し、問題は解決しました。

私ができることは、テーブルに 2 番目の列を作成し、正規表現を使用して、間にスペースを入れてすべての文字/数字を分割することです。次に、この列で検索を行う必要があります。ほら、問題は解決しました。

ただし、(大きな) テーブルはほぼ 2 倍の大きさになるため、余分な列を作成せずに、説明したように MySQL にインデックス作成を実行するように指示できるかどうか疑問に思っていました。

4

1 に答える 1

-1

クエリが本来の行を返しているようです。

MATCH (製品名) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')

基本的に、「lex」で始まり「450」で始まる一致テキストを意味します。あなたのデータは「lex」では一致しますが、「450」では一致しません。「+405」のアスタリスクを削除すると、うまくいくと思います。

MATCH (製品名) AGAINST ('+lex* +450' IN BOOLEAN MODE) ')

'Lexus RX 450 H' と 'Lexus RX450H' を返す必要があります。

于 2013-05-17T13:30:33.280 に答える