过滤来自 Sunspot Solr 的结果

Filter a result from Sunspot Solr

我有一个非常适合在 属性 列表中搜索地址的搜索。但我无法弄清楚如何根据特定文本字段的值过滤这些结果。这是我拥有的:

search = Listing.search do
  fulltext attributes[:address] + " -'Off Market'"

  with(:field_BedsTotal).greater_than_or_equal_to attributes[:field_BedsTotal]
  with(:field_BathsFull).greater_than_or_equal_to attributes[:field_BathsFull]
end

所以它正在搜索用户输入的地址(丢弃任何非市场地址),并且只返回床和浴室大于或等于用户选择的结果。

但是还有另一个名为 "field_PropertySubType" 的字段,其值是 "Condo" 或 "Single Family"。我有一个用户可以检查的复选框(attributes[:condo]、attributes[:single_family])。如何根据 field_PropertySubType 的这些值过滤搜索结果?我在猜测方面,但我找不到足够的文档来帮助我的特定场景。我确实将 field_PropertySubType 字段作为文本添加到我的可搜索列表中。但是,如果我将它添加到 "fulltext",它只会添加到结果中(比如匹配地址或公寓的任何内容),而不是过滤它们(匹配地址和公寓)。谢谢!

编辑:

正在尝试 facet,但语法不太正确:

searchable do
    text :field_StreetNumber, :field_StreetName, :field_StreetSuffix, :field_City
    string :field_PropertySubType, :field_PropertyType
  end

  def self.filter(attributes)

    search = Listing.search do
      fulltext attributes[:address]
      facet :field_PropertySubType, exclude: with(:field_PropertySubType,"Single Family") if params[:single_family].present?
    end

  end

是的,你是对的..你将不得不使用 facets,类似于下面的东西

facet :field_PropertySubType, exclude: with(:field_PropertySubType, attributes[:field_PropertySubType]

但是,您必须将此字段索引为 string,因为 fulltext 不支持分面。

更新

由于您的 if 声明,如果未选择该选项,则不会创建构面。您需要一个 else 声明..

if params[:single_family].present?
  facet :field_PropertySubType, exclude: with(:field_PropertySubType,"Single Family")
else
  facet :field_PropertySubType
end

结果是:

facet :field_PropertySubType, exclude: [with(:field_PropertySubType, "Single Family")]

"with" 只需要用括号括起来。