elasticsearch,searchkick,Ruby On Rails,elasticsearch,Searchkick" /> elasticsearch,searchkick,Ruby On Rails,elasticsearch,Searchkick" />

Ruby on rails 精确匹配

Ruby on rails 精确匹配,ruby-on-rails,elasticsearch,searchkick,Ruby On Rails,elasticsearch,Searchkick,我有15000门课程,我想提高每门课的名次,这样一门课的精确匹配比其他任何课程都要高 当我做课程时。seach_kick(“兴趣理论”,1) 返回正确的搜索,课程“兴趣理论”作为第一个结果 然而,当我做课程时,搜索踢(“兴趣理论3618',1) 3618作为目录号,不返回任何结果。我希望《兴趣理论》课程会被退回,而且是先退回的。似乎搜索是为了在课程标题中包含完整的字符串“兴趣理论3618” 我理解“and”是默认运算符,是否要求我必须使用“or”运算符?由于意外的结果,我犹豫是否使用“or”运算

我有15000门课程,我想提高每门课的名次,这样一门课的精确匹配比其他任何课程都要高

当我做课程时。seach_kick(“兴趣理论”,1) 返回正确的搜索,课程“兴趣理论”作为第一个结果

然而,当我做课程时,搜索踢(“兴趣理论3618',1)
3618作为目录号,不返回任何结果。我希望《兴趣理论》课程会被退回,而且是先退回的。似乎搜索是为了在课程标题中包含完整的字符串“兴趣理论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

为什么不在where子句中筛选目录号:

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


docs ref:

你解决过这个问题吗?@Kathan没有使用搜索踢宝石,我最终不得不使用全弹性搜索,而不是使用搜索踢宝石。