在我们的应用程序中,我们使用acts_as_solr 进行搜索。除了使用模型名称作为搜索查询会返回表中的每一行之外,一切似乎都运行得很顺利。
例如,假设我们有一个 users 表。我们在模型中指定acts_as_solr 来搜索字段名、姓和句柄acts_as_solr :fields => [:handle, :lname, :fname]。当您使用“用户”作为搜索词时,它会返回系统中的每个用户,或数据库中的每一行作为结果。
有没有其他人遇到过这个?
在我们的应用程序中,我们使用acts_as_solr 进行搜索。除了使用模型名称作为搜索查询会返回表中的每一行之外,一切似乎都运行得很顺利。
例如,假设我们有一个 users 表。我们在模型中指定acts_as_solr 来搜索字段名、姓和句柄acts_as_solr :fields => [:handle, :lname, :fname]。当您使用“用户”作为搜索词时,它会返回系统中的每个用户,或数据库中的每一行作为结果。
有没有其他人遇到过这个?
这是由于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 部分似乎被硬编码到该方法中。
当我遇到与此问题相关的一些突出问题时,我想出了其中的大部分内容。 Solr 1.4 中的高亮显示 - requireFieldMatch