1

我正在使用 Sunspot Solr 搜索,它在大多数情况下都适用于基本搜索。它应该能够处理短语周围的引号,因此搜索test case将返回带有测试和案例的文档,而搜索"test case"应该返回带有短语测试用例的文档。

然而,我一直在努力解决这个问题,因为 Rails 似乎在用户输入进入搜索引擎之前就已经从用户输入中删除了任何外部引号。因此返回与但或(带有前导和尾随空格)实际工作"test case"的完全相同的结果,在第一种情况下,因为外部引号被剥离而留下内部引号,而在第二种情况下,因为此问题仅影响前导和尾随引号分数。test case""test case"""test case"

显然,这是一个已知的错误,并且已被Rails 团队标记为不会修复。我真的很惊讶我在网上找不到这么少,因为它似乎是非常常见的功能。

人们如何解决这个问题?因此,要求用户双引号对我来说似乎不是一个合理的解决方案,而且我并不特别想对 Rack 进行自定义修改。

4

2 回答 2

1

嗯,估计没有多少正在运行需要搜索支持引号的 Rails 应用程序?

我现在正在使用通过错误报告链接到的 Rack 补丁来解决这个问题,直到 Rails 修复了这个错误。

编辑:添加链接

在此页面上找到:
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 将换行符附加到您的搜索字符串。这有点像 hack,但应该可以让您克服 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 回答