検索結果は、トピックの最初の投稿を優先して表示すべき

検索インデックス上で、その投稿が最初の投稿かどうかを判別する方法は絶対にないのでしょうか?

このような調整はいかがでしょうか:

トピック内の複数の投稿が特定の検索語に一致し、そのうちのいずれかが最初の投稿である場合、その最初の投稿に検索ランキング上で大幅な優先度を与える。

これにより、投稿番号順に並べるだけの無意味な挙動を避けつつ、最初の投稿に適切な優先順位を与えることができます。

「いいね!」 2

現時点ではできませんが、昨年行った最適化(PM かどうかで PostSearchIndex をフィルタリングできるようにしたもの)と類似しているため、追加は容易です。

「いいね!」 2

私の見解としては、重複トピックの正確なランキングによる理論上のメリットは、あまりにも多くの欠点を伴います。

  • ユーザーは検索をブックマークのように使っている可能性があり、いつも #77 にたどり着いていた検索が、今度は #892 に案内されると混乱するでしょう。

  • 火に油を注ぐ形になりますが、「トピック内の最初の未読へ移動する」機能がないため、後の投稿を優先すると大きな欠点が生じます。つまり、読まずに飛ばす可能性が高くなるからです(例:1、2、3 は読んだが、4〜88 は読まなかった……そして 89 に到達する)。

私は、トピック内の最初のヒットを無条件に優先する方が、説明も簡単で、はるかに安定しているため、そちらを強く推奨します。

「いいね!」 5

同意します。その解決策で問題ありません :+1:

「いいね!」 4

トピック内の最初のヒットのランキングを使用するのか、それともトピック内で最も優れた投稿のランキングを使用するのか、どちらでしょうか?以前は後者を行っていましたが、検索結果に表示されない投稿のランキングを他のトピックの投稿と比較対象として用いていたため、これは誤りだったようです。

「いいね!」 3

集計処理を行う際は、MIN(post_number) にリンクし、MAX(rank) でランキング付けを行うと私は考えます。

「いいね!」 3

新しい動作は以下のプルリクエストで元に戻されました。

「いいね!」 5

このトピックは 6 日後に自動的に閉鎖されました。新しい返信は許可されていません。

トピックを再オープンいただきありがとうございます。これに関連する問題がまだ残っていると思います。https://community.wanikani.com の「General Anime Thread」というタイトルのトピックがあります。「general anime」で検索すると、このトピックが最上位の結果として表示されますが、リンク先は投稿 511になっています。特に奇妙なのは、この投稿には「general」も「anime」という言葉も含まれていないことです。そのため、これは元々報告された問題よりもさらに深刻な状況のように思えます。私の知る限り、https://community.wanikani.com はこの修正がマージされた後のバージョンで動作しているはずです。

もう一つの例として、「japanese book club」で検索すると、そのトピックの投稿 925が表示されます。検索語はトピックのタイトルに含まれているにもかかわらずです。

meta 環境でも再現を試みましたが、成功しませんでした。ただし、私が検索に試みた特定の用語によるものかもしれません。

「いいね!」 4

ソースを表示してバージョンを確認しましたか?ここで再現できない場合、バージョンの不一致である可能性が高いです。

「いいね!」 1

これはページソースからのものです:

Discourse 2.7.0.beta4 - https://github.com/discourse/discourse version 47835ade9a3dcebb14bdd744e92d93b9c9199b90

そのコミットは 2 日前のもので、前の投稿の例でもまだこの問題を再現できます。

「いいね!」 3

非常に詳細なレポートをありがとうございます、@tgxworld がすぐに確認します!

「いいね!」 4

@sam これは何だか分かっています。大規模サイトでは検索パフォーマンスを最適化するため、部分的なインデックスのみを検索対象としています。最初の投稿は非常に古いため、この部分的なインデックスに含まれておらず、それが最初の投稿へのリンクが表示されない理由です。この問題の解決策については考える必要があります。現在思い浮かんでいる案は、いずれもパフォーマンスと精度のどちらかを犠牲にするトレードオフになるからです。

「いいね!」 3

トピックの最初の投稿をすべてインデックスに含めるのは、パフォーマンスとのトレードオフを考慮しても妥当でしょうか?あるいは、最適化された時間範囲内に投稿があるトピックに限り、その最初の投稿のみを含めるのはどうでしょうか。後者がデータベースの観点から実現可能かどうかは別として、です。

「いいね!」 3

技術的には可能ですが、非常に大きな問題です。

この問題を修正するために、例えば1週間かけて慎重にインデックスのシャッフルを行うコストに見合わない可能性を恐れています。

また、短いトピックが山のようにあるようなフォーラムなど、これを複雑にする多くの例外状況も思い浮かびます。

この件については少し様子を見て、どの程度頻発するかを確認しましょう。

当面の対策として、あなたのフォーラムでは最近のインデックスのサイズを倍増させる変更は実施可能だと思います。これは設定可能です(@tgxworld さん、これを可能にしてください)。

「いいね!」 4

ありがとうございます!安全に行えるとお考えであれば、ぜひお願いしたいです!

「いいね!」 3

これは実施されましたか?以前言及されたトピックを検索すると、511 番ではなく 523 番の投稿に移動します。これは、インデックスの範囲外になる投稿が増えていることを示しているように思われます。

「いいね!」 2

こんにちは、Seanさん。指摘されなかったことをお詫びします。

SiteSetting.search_recent_posts_size を 250k に変更しました。あなたのトピック数は 163k ですので、問題ありません。この変更が反映されるまでには数日かかります。スケジュールされたジョブの実行が必要です。

「いいね!」 4

変更はすでに反映されていると思います。以前は100万件に設定しましたが、ここで更新を投稿することを忘れていました。

@sam 何かのタイミングでこの問題に対処する予定はありますか?部分インデックスに最初の投稿すべてを含めるのは、悪いトレードオフには思えません。以前の議論から、@codinghorror は検索がトピック内の投稿を表示させる前に、まずトピックを強く優先すべきだと考えていることは知っています。

「いいね!」 3