metaで検索の改善をテスト中

最近、内部からのフィードバックにより、検索アルゴリズムの改善ラウンドを優先することにしました。

これらの変更は、Discourse 3.1.0.beta3 の一部として、すべてのサイトにロールアウトされました。更新後、サイトは自動的に検索のためにすべてのコンテンツの再インデックス作成を開始します。

これに伴い、2つの新しいサイト設定が追加されましたが、これらはメタでのテストでうまく機能することがわかった値に設定されているため、ほとんどのサイトで変更する必要はないと考えています。

タイトルでの完全一致を部分一致よりも優先する

Discourse は検索時に stem + prefix match を実行します。これにより、非常に驚くべき結果が生じることがあります。

例:「redis」は「redi」にステムされるため、「redis」の検索では、「redirect」など、「redi」で始まるすべての単語が見つかる可能性があります。

新しい非表示サイト設定 prioritize_exact_search_title_match が追加され、デフォルトで有効になりました。

変更前:

変更後:

これにより、タイトルを覚えて入力した場合、タイトルにヒットする可能性がはるかに高くなります。

最大インデックス重複の削減

ランキングアルゴリズムは、用語に複数のヒットがある投稿を、用語が1回だけ含まれる投稿よりも高くランク付けします。これは、単語を何度も繰り返すだけで検索で「チート」できることを意味します。単語を多く入力するほど、検索の上位に浮上します。

新しい非表示サイト設定 SiteSetting.max_duplicate_search_index_terms はデフォルトで6です。

これが適用されると、投稿内で「sam」を6回または60回入力しても、ランクは同じになります。結果に与えられるボーナスに上限が設けられます。

この変更は、検索インデックスが少し小さくなるため、パフォーマンスにもプラスの影響があります。

その他のバグ修正

作業の一部は、異常な検索ケースの調査でした。

  • 以前は、クローズされたトピックの優先度を下げていましたが、アーカイブされたトピックを忘れていました。これは修正されました
  • 以前は、「ドメイン」検索のプレフィックスマッチに依存しすぎていました。つまり、「happy」という単語は「happy.com」を見つけられませんでした。これは、「happy」が「happi」にステムされ、プレフィックスマッチが失敗するためです。これは修正されました

今後の作業

  • メンションの自動補完に「あいまい」検索を実験する予定です。(たとえば、文字をスキップできるようにする)
  • タイトルでの重複用語の優先度を下げることを調査する予定です。現在、クローズされたトピック「hello goodbye hello」は、オープンなトピック「hello world」よりも高くランク付けされています。
  • PageRank… 現在、結果のランキングにおいて、内部リンクの数(着信リンク)を考慮に入れていません。これは、信じられないほど多くのリンクがあるトピックが、どこからもリンクされていないまれなトピックよりも低くランク付けされることがあることを意味します。これをランキングアルゴリズムに組み込むことができれば良いでしょう。
  • AI統合を検討するオープンな取り組みがあります。GPTのようなツールからインスピレーションを得られるかもしれません。

ご協力のお願い

メタで悪い結果に気づきましたか?もしそうなら、検索した用語と、結果が期待外れだった理由を説明してください。

変更はどのように感じられましたか(中立/改善/悪化)?

「いいね!」 47

念のため確認ですが…設定をアップデート/アップグレードした場合、これらの2つの設定は見つかりますか?隠し設定の場所はわかっていますので問題ありません。これらは現時点ではMeta専用ですか?こちらでテストするよりも、自分のサークルでテストする方が簡単です :wink:

「いいね!」 7

はい、ただし rake search:reindex も実行する必要があります。

「いいね!」 7

Meilisearch を使って検索を改善することを検討しましたか? 非常に少ないリソースで済み、Docker ビルドに含めることができます。

「いいね!」 5

7件の投稿が新しいトピックに分割されました:検索でクローズ済みまたは解決済みのトピックを優先する

この分野での実験を開始しました。

最初の実験はユーザー/グループ検索に限定されていますが、すべてがうまくいけば、さらに拡張される可能性があります。

「いいね!」 8

Sphinx、Melli、Elastic、Solr/Lucene など、さまざまな統合を検討しましたが、それらにはコストがかかります。インデックスを実行するための別のプロセスをホストすること、インデックスが最新でなくなるリスク、複雑さなど、すべて無料ではありません。

他のオプションを検討する前に、PG でどれだけうまくいくかを確認したいと思います。それらは最後の手段としておきたいです。

非常に興味深い問題です。はい、それらは(常にそうでしたが)優先度が低くなっています。少なくとも、管理者がこれらのケースで何をするか(優先度を上げる/下げる/ニュートラルなど)を決定できるように、discourse-solved にサイト設定を追加することを検討できると思います。

「いいね!」 16

残念ながら、PostgreSQLは検索エンジンとしては適していません。Meilisearchは驚くほど低いメモリ消費量と無限の検索可能性を備えています。Rubyと比較した場合のサーバーへのオーバーヘッドは、単に見えなくなるだけです。

「いいね!」 3

これは簡単な問題ではありません。私たちの検索には膨大な数のディメンションと多くのパラメータがあり、Postgresテーブルに直接結合します。

外部検索プロバイダーを使用する場合、「同期」について心配する必要があります。

  • Discourseでトピックが閉じられた → エンジンに通知
  • 投稿が削除された → エンジンに通知
  • いいねがあった → エンジンに通知
  • トピックが分割またはマージされた → エンジンに通知

これらはほんの一例であり、複数のインデックス(ユーザー/投稿/トピック/カテゴリ)の構築も含まれます。

とはいえ、適切な投資があれば、必ずしも乗り越えられない問題ではありませんが、それは途方もないタスクであり、それがどれほど優れているかを示す概念実証はまだありません。Mellisearchにタイポランカーやその他の多くの機能があるのは素晴らしいことです。しかし、それを統合することはまったく無料ではありません。

大まかな見積もりでは、Mellisearchとの緊密で堅牢な統合を構築するには約3か月の作業が必要だと思います。検索エンジンが「プラグ可能」になるようにDiscourseを設計する場合、さらに6か月かかる可能性もあります。

なお、DiscourseではAlgoliaとの統合をサポートしています。https://discourse.algolia.com/ これはまだ完全に安定しているとは言えず、高度な検索機能全体が実装から除外されていることがわかります。

「いいね!」 8

Discourseのような大規模なコミュニティがあれば、もっと早く、3ヶ月もかからないと賭けてもいいです。

「いいね!」 2

しばらくして、最もアクティブなユーザーに検索についてどう思うか尋ねました(「考えた」:man_facepalming: )。検索機能が強化されたことは伝えていませんでした。

誰もが全く同じことを言いました。考えていなかったが、尋ねられたので、今では関連性の高い検索結果がずっと簡単に見つかるようになった、ほとんどの場合すぐに、と気づいたのです。

Discourse の一部は WordPress のコメントシステムとして機能しています。いいえ、コメントは増えませんでしたが(ブログのコメントほど過大評価されているものはありません)、フォーラムの存在を示すようになりました。最近では、Discourse を検索エンジンとして利用しているユーザーが数人います。コメントはしませんが、WordPress で探しているものを Discourse のトピックで検索し、ブログに戻ります。もちろん、タグシステムも大いに役立ちます。そして WordPress には、効果的な検索と機能的なタグ付けの両方が欠けています。

これを Praise に投稿すべきかどうかわかりませんが、この新しく改善された検索機能がうまく機能していることに非常に満足していることをお伝えしたかっただけです。

「いいね!」 11

うわー、ありがとうございます。これは本当に気分が良いです!現在、PRを準備中であり、まもなくグローバルに展開される予定です。

「いいね!」 11

分かりにくかったらすみません。これはホストされたサイト(最新のデプロイ済み)で有効になるのでしょうか?リリースアナウンスはこちらを指していますが、これは隠し設定について話しています。その隠し設定はオンになっていますか?

「いいね!」 6

何もする必要はありません。

元の投稿に注釈を追加します。

「いいね!」 9

素晴らしいアップデートをありがとうございます。検索同義語を定義できるようになると、私たちにとって大きな改善になります :pray: ありがとうございます。

「いいね!」 7

9件の投稿が新しいトピックに分割されました:ユーザー名を検索から除外できますか

以前からこの問題があったかどうかわかりませんが、検索結果に多くのシステム作成の投稿が表示されることに気づきました。メタではより顕著なエッジケースかもしれませんが、検索に関連するシステムメッセージは期待すべきではありません。

「自動的にクローズされた」などの用語で検索した場合の検索結果の例:

「いいね!」 4

ここでは再現できません。

「いいね!」 3

それを再現できます。関連性ではなく最新の投稿で並べ替えると、結果に多くのシステムメッセージが表示されます。

「いいね!」 4

ああ、わかりました。すべてではありませんが、妥当な範囲です。これらのメッセージは検索から除外されるべきだと思います。

「いいね!」 3