过滤来自 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" 只需要用括号括起来。
我有一个非常适合在 属性 列表中搜索地址的搜索。但我无法弄清楚如何根据特定文本字段的值过滤这些结果。这是我拥有的:
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" 只需要用括号括起来。