我有一个员工搜索功能,管理员用它来搜索员工。它需要返回分配到经理(用户)所分配到的任何相同市场的员工,以及尚未分配到任何市场的员工。
例如:
Employee Assigned market ids
manager_1: [1, 2]
employee_1: [1, 3]
employee_2: [3, 4]
employee_3: []
manager_1执行的搜索应返回employee_1和employee_3。
构建查询的代码:
def populate_search_results(query, market_ids)
user_assigned_market_ids = market_ids.join('|')
all_market_ids = Market.all.map(&:id).join(',')
if params[:status] == 'current'
is_current = 1
else
is_current = 0
end
full_query = "#{query} @assigned_market_ids (#{user_assigned_market_ids} | -(#{all_assigned_market_ids})) @current #{is_current})"
@employees = Employee.search(full_query, :match_mode => :extended).page(params[:page]).per(25)
end
查询的简单版本 - full_query = "#{query} @assigned_market_ids !(#{all_assigned_market_ids})"
有效,并返回未分配到任何市场的员工,但我无法与user_assigned_market_ids
和all_assigned_market_ids
同时使用{{1}}在同一个查询中。
我尝试了几种不同的语法组合,但结果包括将错误的员工返回到Sphinx语法错误,只返回0结果。
如果了解构建Sphinx查询的人可以指出我做错了什么,那将非常感激。