句読点を含む検索で不安定な動作が発生

例えば it, it:“it, it:”“it, it:”,"it, it:",、または it, it:” で検索してみてください。この投稿(この投稿)には「it, it:”」が含まれているにもかかわらず、検索結果に表示されません。[1]

また、検索ボタンを押すと、引用符 “”"" に変換されます。この挙動は好ましくなく、バグかどうかはわかりません。

プラットフォーム:Android版Edge、try.discourse.org、セーフモードでも再現可能


  1. 自動削除された場合のために:テスト投稿の内容は:It, “it, it:”, it, oandnxkwbs。 ↩︎

「it」は検索から除外されるストップワードだと思います。この問題が句読点に関するものかどうかを確認するために、そのリストにない単語で再現を試みてみましたか?
Are specific terms ignored from searches? - #5 by codinghorror

他の方法ではもう再現できません。問題を確認したフォーラムのDiscourseが古いバージョンなのかもしれません。

実際には、もう一度再現できると思います。we don't で検索して、この投稿 を探してみてください。

“just-use-interface{}/object; we don’t need generics” または "just-use- interface{} / object ; we don't need generics" で検索しても見つかりません。

しかし、just-use- interface{} / object ; we don't need generics で検索すると見つかります。

はい、その通りです…… it を検索することは一切できません…… ここで試しても結果は出ません。I、the、a、代名詞など、極端に多くの回数が出現する単語は、意味のある区別を提供するために頻出しすぎるため、インデックス作成から除外されます。

ここでも同じです。wedon't(技術的には dont)はインデックス付けされていません。

この状況は少し異なります……

"just-use- interface{} / object ; we don't need generics"

これは絶対に機能しません。引用符は完全一致を要求しますが、スペースがあるため完全一致になりません。

"just-use-interface{}/object; we don't need generics"

で検索する場合、元の投稿テキストにはカーリゲーションクォート(don’t)が含まれていますが、検索ではそれらが取り除かれるため、完全一致を返すことはできません…… つまり、投稿と検索は完全に非対称であり、これは改善できる点かもしれません。

これは、引用符がないため完全一致を検索しておらず、“interface” “object” “need” “generics” という用語を拾い上げるため、その投稿がこれらの用語に対する最良の一致となるからです。

私が探していたトピックを見つけるのは非常に困難でした。たとえごく一般的な単語を使った場合でもです。以前に名前が付けられており、何年も前にTypesense統合の実験が行われたことがありました。

Discourseの検索機能の改善に関する具体的な計画があるのかどうか気になります。検索は最も注目を集める機能の一つであり、リファクタリングとさらなる改善が必要だと考えています。

「プレーンテキスト検索」オプションを追加するのはどうですか?"" の引用符のような落とし穴を無効化できます。

また、検索用にインデックスを作成する対象から「we」や「don’t」(don, t)を除外する技術的な理由があるのか気になっています。あまりに一般的すぎるからでしょうか?

うん、まさにその通り

ストップワードとは、非常に一般的で、ほぼすべての文書に出現し、識別価値のない単語のことです。したがって、全文検索の文脈では無視することができます。例えば、すべての英語のテキストには athe のような単語が含まれますが、これらをインデックスに保存しても無意味です。

PostgreSQL: Documentation: 18: 12.6. Dictionaries