轨道 - 使用solr按名称的字母顺序对用户进行排序



在我的模型中employee.rb我有

searchable do
string :status
integer :user_id
string :profession do
user.job_role
end
string :employee_name do
user.first_name
end
end

在控制器的索引方法中,我正在将 solr 搜索作为

@search = Employee.solr_search do
with :user_id, id
with :status, params[:status] unless params[:status].blank?
with :profession, params[:profession] unless params[:profession].blank?
order_by :employee_name
paginate :page => params[:page], :per_page => 50
end

如您所见,我正在尝试根据员工first_name对员工进行排序

order_by:employee_name

但结果并不完全是我所期望的。 例如,用户名在 usreFname1 Lname1之前Tom Hanksapper 的用户。

按姓名的字母顺序对员工进行排序的最佳方法是什么?

文本字段被标记化,这意味着它们根据某些条件(通常是空格和特殊字符,但这取决于为字段设置的标记器)拆分为单独的标记。当Lucene尝试对此进行排序时,它将选择其中一个生成的令牌并使用它,最终以明显的随机排序结束。

相反,请确保对用于排序的字段使用字符串字段,以便仅存在单个值。另一种选择是将 TextField 与 KeywordTokenizer 一起使用,因为 KeywordTokenizer 将输入文本保留为单个标记,而不是将其拆分为多个标记 - 给出与使用字符串字段相同的最终结果。不同之处在于,带有关键字标记器的 TextField 允许您附加过滤器(请注意不要再次使用将文本拆分为多个标记的过滤器),例如小写过滤器,如果您希望排序不区分大小写。

如果您已经将内容索引为文本字段,则必须重新索引所有内容 - 删除索引的内容并将文档重新提交到 Solr 以便再次从头开始处理。

最新更新