Searchkick提升完全匹配

srm*_*srm 6 ruby-on-rails elasticsearch searchkick

我有15,000个课程,我想提高每个班级的标题,所以一个班级的精确匹配比其他任何东西都高.

当我做Course.seach_kick('感兴趣的理论',1)时,返回正确的搜索,并将"感兴趣的理论"作为第一个结果.

但是,当我将Course.search_kick('interest of interest 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
Run Code Online (Sandbox Code Playgroud)

小智 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
     )
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,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
     )
Run Code Online (Sandbox Code Playgroud)

你可以在where子句中插入尽可能多的过滤器,就像ActiveRecord.where()一样

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