1

200 万を超える製品を含む大規模な INNODB データベースがあります。「products」テーブルには、id、title、description、category のフィールドがあります。

Web サイトで使用されるすべてのカテゴリのリストを含む「カテゴリ」と呼ばれる MyISAM テーブルもあります。これには次のフィールドがあります: id、name、keywords、parentid。

私の質問はコードではなくロジックに関するものですが、私が達成しようとしているのは次のとおりです。

ユーザーがサイトに新製品をリストするとき、説明を入力しているときに、その製品をどのカテゴリに入れるかを(正確に)判断しようとする必要があります。

最初に MySQL MATCH() を使用して入力したタイトルをカテゴリ テーブルのキーワード リストと照合してみましたが、これは正確とはほど遠いものでした。

より良いアイデアは、ユーザーが入力したタイトルをデータベースに既にある製品のタイトルと照合し、それらが属しているカテゴリでグループ化し、最大のグループで並べ替えることです。ただし、INNODB データベースでは明らかにフルテキストを使用できません。また、200 万個のアイテムを使用すると、とにかくかなり遅くなると思います。

どうやってそれをしますか-スタックオーバーフローが同様の質問を表示する方法と同様の方法である必要があると思いますか?

4

1 に答える 1

1

適切なサーバーで実行している場合、200 万レコードのフルテキスト インデックスは有効なオプションです。最初のインデックス作成にはしばらく時間がかかりますが、それは確かですが、検索はかなり高速である必要があり、MySQL はそれを受け入れることができます。

InnoDB は、v5.6.4 の時点でフルテキスト インデックスをサポートしています。アップグレードを検討する必要があります。

アップグレードがオプションでない場合は、回避策を提案する私の以前の回答を参照してください。

ユースケースでは、次のWITH QUERY EXPANSIONオプションを確認することをお勧めします。

これは、検索を 2 回実行することで機能します。2 回目の検索の検索フレーズは、最初の検索で最も関連性の高いいくつかのドキュメントと連結された元の検索フレーズです。したがって、これらのドキュメントの 1 つに「データベース」という単語と「MySQL」という単語が含まれている場合、2 回目の検索では、「データベース」という単語が含まれていなくても、「MySQL」という単語を含むドキュメントが検出されます。</p>

于 2013-07-19T09:04:41.517 に答える