使用模型作为搜索查询时,acts_as_solr返回数据库中的所有行

时间:2009-01-16 19:07:17

标签: ruby-on-rails ruby lucene solr

在我们的应用程序中,我们使用acts_as_solr进行搜索。除了使用模型名称作为搜索查询返回表中的每一行之外,一切似乎都在顺利运行。

例如,假设我们有一个用户表。我们在模型中指定acts_as_solr来搜索字段的名字,姓氏和句柄acts_as_solr:fields => [:handle,:lname,:fname]。当您使用“user”作为搜索词时,它会返回系统中的每个用户,或者返回数据库中的每一行。

还有其他人遇到过这个吗?

1 个答案:

答案 0 :(得分:1)

这是因为acts_as_solr在parser_methods.rb中构建查询的方式

您需要在parser_methods.rb

中进行一些更改

更改

models =  "AND #{solr_configuration[:type_field]}:#self.name}" 

models =  "#{solr_configuration[:type_field]}:#self.name}" 

然后不要将构造的模型字符串包含在查询中。

query = "(#{query.gsub(/ *: */,"_t:")}) #{models}"

将此更改为

query = "(#{query.gsub(/ *: */,"_t:")})"

现在,您需要强制将此查询的模型部分强制搜索到SOLR。

我用.....做了这个。

query_options[:fq_model] = models

转到standard.rb

确保添加

:fq_model

进入VALID_PARAMS数组。

添加了以下

if @params[:fq_model]
 hash["fq"] = @params[:fq_model]
end

我添加了一些额外的案例,但除非您想要:fq是find_by_solr上的一个选项,否则您不应该需要它们。

在我完成所有这些之后,我现在可以搜索模型名称,并获得我期望的更小的结果集。

有可能multi_solr_search需要更新才能工作,因为看起来查询的type_t部分被硬编码到该方法中。

当我遇到与此问题相关的一些突出显示问题时,大部分都是如此。 Highlighting in Solr 1.4 - requireFieldMatch