1

ユーザーが投稿を検索できるサイトを構築しています。各投稿はデータベース内に保存されます。ユーザーが iPad Mini FOR SALE などを検索すると、クエリは次のようになります。

SELECT * FROM testtable WHERE title REGEXP 'iPad|Mini|FOR|SALE'

クエリは次の 3 つの項目になります。

  • iPadミニを売ります
  • iPadの販売
  • 本物のゴールドウォッチを探しています

最初の 2 つのアイテムで検索は成功しましたが、3 番目のアイテムは実際にはグループに属していません。私はそれを除外し、関連するアイテムだけを検索に表示したいと考えています。for、is、are などの一般的な単語を削除することを考えていますが、何か提案はありますか?

補足:「REGEXP」をお勧めしますか?私はそれを見て、使用しただけで、まだ飛び込んでいませんでした。(検索フィルターの質問だけに答える必要はありませんが、良い情報があれば教えてください。)

4

3 に答える 3

2

検索も視野に入れる必要がありますFULLTEXTFULLTEXT検索を機能させるには、 MyIsamMySQL テーブル エンジン タイプが必要です。innoDB もサポートされていますが、私はそれについてあまり知りません。

于 2013-03-05T09:37:20.813 に答える
1

すでにこのトピックを読みましたか? http://www.regular-expressions.info/mysql.html または、これも良いチュートリアル/説明です: http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql -選択ステートメント/

于 2013-03-05T09:38:25.550 に答える
1

はい、一般的な単語を削除します

これらはストップ ワードと呼ばれます。これらは一般的に無関係な言葉です。

関連性を考慮する

「ipad mini 販売中」というタイトルの投稿は、[ipad mini 販売中] を検索しているユーザーに非常に関連しています。「販売中の iPad」というタイトルの投稿は関連性が低くなります。「チーズ工場の販売」というタイトルの投稿は、まだあまり関連性がありません。

サイト上の投稿とユーザーが検索した用語に関して、関連性があると見なされるものを計算するためのアルゴリズムを導出することを検討してください。

アルゴリズムは、検索された用語と投稿タイトル内の用語の出現を調べるのと同じくらい簡単かもしれません. 検索されたすべての用語がタイトルに含まれていますか? おそらく非常に関連性があります。検索された用語の 10% がタイトルに含まれていますか? おそらく非常に無関係です。

関連性スコアの計算方法を検討してください。結果が結果に存在するには無関係すぎると見なされるしきい値を設定します。経験上、しきい値を非常に高く設定し、関連性の高い結果のみを対象とし、関連性の高い結果が見つからない場合にのみ関連性の低い結果をリストすることをお勧めします。

ステミングを使用する

余談ですが、検索ではステミングを使用してください。ステミング アルゴリズムは、単語を共通の語幹に減らします。完全な検索語ではなく語幹のみを検索します。ステミングについて読んでください。使用している言語のポーター ステミング アルゴリズムの実装を見つけます。これは長年のアルゴリズムであり、経験上、高速で、ほとんどのアプリケーションにとって十分に優れています。

正規表現?

ストップ ワードを削除し、語幹ベースのアプローチを使用すると、関連性の低い問題になります。いずれにせよ、それは実装の問題であり、有意義な答えを得るには主観的すぎる可能性があります. 試してみて、パフォーマンスを調べてください。別のアプローチを試して、パフォーマンスを調べてください。あなたに最適なものを使用してください。

于 2013-03-05T09:50:19.030 に答える