我有15,000个课程,我想提高每个班级的标题,这样一个班级的精确匹配就会超越其他一切。
当我做Course.seach_kick时('感兴趣的理论',1) 正确的搜索返回课程'感兴趣的理论'作为第一个结果。
然而,当我做Course.search_kick时('感兴趣的理论3618',1)
3618是catalog_number,不返回任何结果。我期望将兴趣理论课程归还,并首先返回。似乎搜索正在寻找完整的字符串'感兴趣的理论3618'被列入课程名称。
我理解'和'是默认运营商,是否要求我必须使用'或'运营商?我犹豫是否使用'或'操作员因为意外的结果。
谢谢,我真的很喜欢使用宝石。
搜索方法:
def self.search_kick(query, page)
search(query,
fields: ["title^10", "description", "crse_id", "subject", "catalog_number" ],
facets: [:subject],
misspellings: false,
page: page,
per_page: 20
)
end
def search_data
{
title: title,
description: description,
crse_id: crse_id,
subject: subject,
catalog_number: catalog_nbr
}
end
答案 0 :(得分:2)
为什么不在where子句中过滤catalog_number:
search(query,
fields: ["title^10", "description", "crse_id", "subject" ],
facets: [:subject],
misspellings: false,
where: {catalog_number: 3618},
page: page,
per_page: 20
)
在大多数情况下,where子句来自IF:
conditions = {}
if params[:catalog_number].present?
conditions[:catalog_number] = params[:catalog_number].to_i
end
search(query,
fields: ["title^10", "description", "crse_id", "subject" ],
facets: [:subject],
misspellings: false,
where: conditions,
page: page,
per_page: 20
)
您可以在where子句中插入尽可能多的过滤器,与ActiveRecord.where()
相同