思考Sphinx-查询以检查任何数组x或没有数组y

时间:2015-10-19 20:06:31

标签: ruby-on-rails sphinx thinking-sphinx

我有一个员工搜索功能,管理员用它来搜索员工。它需要返回分配到经理(用户)所分配到的任何相同市场的员工,以及尚未分配到任何市场的员工。

例如:

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_idsall_assigned_market_ids同时使用{{1}}在同一个查询中。

我尝试了几种不同的语法组合,但结果包括将错误的员工返回到Sphinx语法错误,只返回0结果。

如果了解构建Sphinx查询的人可以指出我做错了什么,那将非常感激。

0 个答案:

没有答案