我有15,000门课程,我想提升每个课程的标题,这样一个课程的精确匹配就会高于其他任何东西。
当我做Course.seach_kick(“兴趣理论”)时,1)返回正确的搜索结果,第一个结果是课程“兴趣理论”。
然而,当我做Course.search_kick(‘感兴趣的理论3618',1)
3618为catalog_number,则不返回任何结果。我期待着利息课程理论的回归,并首先回归。搜索似乎是在寻找完整的字符串“感兴趣的理论3618”包含在课程的标题中。
我知道'and‘是默认的运算符,我必须使用'or’运算符吗?我很犹豫是否使用'or‘运算符,因为出现了意想不到的结果。
谢谢,我真的很喜欢用宝石。
搜索方法:
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发布于 2014-12-14 16:31:24
为什么不在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()一样。
https://stackoverflow.com/questions/25551425
复制相似问题