検索時に完全一致を強制する方法

いくつかの検索で結果が得られないことに気づきました。

しかし、特定のトピックに絞って検索すると、探している結果が得られます。

最初はアクセント付きの文字が原因かと思ったのですが、いくつかテストしたところ、アクセントのない文字でも同じ現象が発生しました。

次に、ストップワードが原因ではないかと考え、app.yml を変更してスペイン語のストップワード辞書を切り捨てました

ls -l /usr/share/postgresql/13/tsearch_data/spanish.stop
-rw-r--r-- 1 root root 0 May 12 06:37 /usr/share/postgresql/13/tsearch_data/spanish.stop
                       ☝️

完全一致が常に検出されるように調整できる設定はありますか?

@Nacho_Caballero さん、こんにちは

問題を再現できるサンプルテキストと検索語を提供していただけますか?画像では確認できますが、抜粋部分しか見えません。

Alan、ありがとうございます。

その特定の投稿の内容は以下の通りです:

その通りです。「pienso que」の後には使いません。なぜなら、あなたが考えていると主張していることは現実であり、可能性ではないからです。

一方、同じ構造を否定形で使う場合は、接続法を使います。「No pienso que haya mucha gente en el mercado hoy(今日は市場に多くの人がいるとは思わない)」のように。

これがあなたの質問への回答になれば幸いです。もしさらに詳しい情報が必要であれば、お気軽にお知らせください。喜んでお手伝いします。

よろしく!:smiley:

ただし、ここでその動作を再現するには、ロケールをスペイン語に設定し、辞書を切り詰める必要があります😅

私はローカルで動作している開発用の Discourse サイトでテストしましたが、その動作を再現できませんでした。おそらくサイトが実質的に空だからだと思います。この問題は、投稿数が非常に多くなるまで発生しないのではないかと思っています(現在、私は約 68,000 件の投稿を持っています)。

Postgres の辞書に関連する他の試みもできますが、開発環境で Docker イメージにどうやってアクセスすればよいか分かりません。launcher enter app に相当するコマンドはありますか?

理想的には、ストップワードを無視する方法があればよいのです。例えば、あなたのメッセージ内のこの文を検索する場合:

@Nacho_Caballero さん、こんにちは。現在 Discourse が採用している検索アルゴリズムについて教えていただけますか?それがあれば、問題の調査に役立ちます。

Yashi さん、ありがとうございます。

Discourse は Postgres のデフォルトの全文検索アルゴリズムを使用していると思われます。引用符を使用して完全一致を提供するには(語幹化やストップワードの無視を行わずに)、「simple」辞書を使用するしかないと思います :thinking:

ありがとうございます、@Nacho_Caballero さん。

Postgres の全文検索アルゴリズムを確認させていただきます。

完全一致で検索することは可能でしょうか?

例:

現在、「flow」で検索すると、残念ながら「flower」が最も関連性が高い結果として返ってきてしまいます。

「flow」のように、引用符をつけて検索してください(例:flow ではなく「flow」)。