2

数分ごとに約 500 のパラグラフが「コンテンツ」と呼ばれるテーブルでデータベースに送信されることになっています (この数は数か月で 2,500 を超えることになります)。4,000 行を超える "キーワード" という別のテーブルがあります (10,000 行を超えると予想されます)。

Keywords
+------------+-------------------+
| Keyword_id | keyword           |
+------------+-------------------+
|          1 | "Venture Capital" |
|          2 | "Financing"       |
+------------+-------------------+

問題は次のとおりです。一致するかどうかを確認するために、各キーワードがテキストの受信段落間で相互参照されるソリューションをスケーリングする最良の方法は何ですか?

段落のどこに一致があるかは気にしていないので (私の唯一の懸念は、一致があることです)。 if(preg_match()){}おそらく機能する可能性がありますが、2,000,000 回のローエンドでも、キーワードを検索して段落を実行しています。さらに、間違っていたら訂正してください。preg_match はかなり高価です。

私の頭をよぎった可能性の 1 つは、すべての行に対して DB を呼び出す代わりに、キーワードの配列をキャッシュに保持することでした。それは間違いなく物事をスピードアップするのに役立つと思います。

これがPHPだけであることは気にしません。アプリケーションのこのセクションを Python で作成する必要がある場合 (間違っていたら訂正してください。ただし、テキストの解析では Python の方がはるかにコストが低いと聞いています)、私は完全に耳を傾けます。

4

1 に答える 1

0

MySQL の場合:

検索クエリー:Vent Capit

に対する一致の使用:

SELECT * FROM keywords WHERE MATCH (keyword) AGAINST ('+Vent* +Capit*' IN BOOLEAN MODE);

照合を使用する_ci場合 (ci は大文字と小文字を区別しないことを表します)、照合では大文字が無視されます:)

于 2012-08-23T07:45:03.483 に答える