【问题标题】:acts_as_solr returns all rows in the database when using the model as search query使用模型作为搜索查询时,acts_as_solr 返回数据库中的所有行
【发布时间】:2010-04-02 03:58:21
【问题描述】:

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

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

还有其他人遇到过这种情况吗?

【问题讨论】:

  • 这真的很有趣。您是否查看了发送到 solr 的生成文档以了解该字段的包含位置?

标签: ruby-on-rails ruby lucene solr


【解决方案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

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

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

multi_solr_search 可能需要更新才能正常工作,因为查询的 type_t 部分似乎被硬编码到该方法中。

当我遇到与此问题相关的一些突出问题时,我想出了大部分。 Highlighting in Solr 1.4 - requireFieldMatch

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多