7

我有 15,000 门课程,我想提高每个班级的名称,以便将班级的精确匹配提升至高于其他所有内容。

当我执行 Course.seach_kick('theory of interest' , 1) 时,将返回正确的搜索,并将课程 'theory of interest' 作为第一个结果。

但是,当我将 Course.search_kick('theory of interest 3618', 1)
3618 作为 catalog_number 时,不会返回任何结果。我期待着兴趣理论课程被退回,并且首先被退回。似乎搜索正在寻找包含在课程标题中的完整字符串“感兴趣的理论 3618”。

我知道'and'是默认运算符,我必须使用'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
4

1 回答 1

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()

文档参考:https ://github.com/ankane/searchkick#queries

于 2014-12-14T08:31:24.110 回答