1

私はSunspotSolr検索を使用しています。これは、基本的な検索の大部分で正常に機能します。フレーズの前後の引用符を処理できるはずなので、を検索するtest caseとテストとケースの両方のドキュメントが返されますが、を検索すると"test case"フレーズテストケースのドキュメントが返されます。

ただし、Railsが検索エンジンに到達する前に、ユーザー入力から外側の引用符を削除しているように見えるため、私はこれに頭を悩ませてきました。したがって、 or (先頭と末尾のスペースを含む)と"test case"まったく同じ結果が返されますtest case。最初のケースでは、外側の引用符が内側の引用符を残して削除され、2番目のケースでは、この問題は先頭と末尾の引用符にのみ影響するためです。マーク。""test case"""test case"

どうやら、これは既知のバグであり、Railsチームによって修正されないとマークされています。非常に一般的な機能のように見えるので、このオンラインで見つけることができることがどれほど少ないかに本当に驚いています。

人々はこれをどのように回避していますか?このため、ユーザーに二重引用符を付けるように依頼することは、私には合理的な解決策のようには思えません。特に、Rackに独自のカスタム変更を加えたくありません。

4

2 に答える 2

1

うーん、引用符をサポートする検索が必要な Rails アプリを実行している人はあまりいないのではないでしょうか?

Railsがこのバグを修正するまで、バグレポートにリンクされているRackパッチを使用してこれを回避しています。

編集:リンクの追加

このページにあります:
https://rails.lighthouseapp.com/projects/8994/tickets/4808

直接ダウンロード:
https://rails.lighthouseapp.com/projects/8994/tickets/4808/a/662679/fix_rack_110_quote_parsing.rb

ただし、これは間違いなく完全ではなく、末尾の引用符で終わると先頭部分が切り捨てられるなど、いくつかのケースがまだ見つかっています。

于 2010-09-13T21:54:08.593 に答える
1

どうやら、前述の Lighthouse チケットから、「改行文字を追加すると、二重引用符が保持される」ようです。(

Javascript を使用して、検索文字列に改行を追加することを検討してください。ちょっとしたハックですが、クエリに悪影響を与えることなく Rack バグを回避できるはずです。

jQuery で思いついた簡単な例です。未テスト、ymmv など

// append a newline to a field when submitting a form
// to work around a Rack parsing bug

$('#your_form').submit(function() {
  $('#your_input').val(function(i, val) {
    return val + "\n";
  };
});
于 2010-09-14T00:27:18.763 に答える