在思考狮身人面像搜索中作为属性索引的两个关系之间强制配对

时间:2014-03-01 01:37:08

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

我有一个User模型,可以将ProfileAnswerhas_many关系建立起来。 我正在为profile_answers.response编制索引profile_answers.question_id

我需要能够运行搜索字符串以查找特定问题的搜索查询。

这就是我这样做的方式,这是错误的。有数据点

A{

profile_answer{
  id = 99
  question_id = 1
  answer = 'Hi'
}

profile_answer{
  id = 100
  question_id = 2
  answer = 'Bye'
}

}
B{

 profile_answer{
     id = 102
     question_id = 1
    answer = 'Bye'
 }

 profile_answer{
    id = 101
    question_id = 2
    answer = 'Hi'
 }

}

当我在question_id = 2上搜索'Hi'时,返回A和B.

这是我的索引定义:

 indexes profile_answers.answer, sortable: true, as: "answer"
 has profile_answers.question_id, as: "question_id"

并执行搜索:

  User.search('@answer "Hi"', match_mode: :extended, with: {question_id: given_question.id})

我尝试索引这些列的某些组合并搜索但从未生成过正确的索引。

1 个答案:

答案 0 :(得分:0)

Answered this思科Sphinx Google小组也是如此:

您尝试做的事情是不可能的(至少在搜索用户时)。 Sphinx没有哈希/词典的概念......在你的索引中,每个用户都有一个名为answer的字段,其中包含在一个字符串中连接在一起的所有答案,然后是一个问题ID数组的属性。问题ID和每个答案之间没有关系。

更好的方法是在ProfileAnswer上定义索引,然后通过它进行搜索 - 然后在搜索结果中显示每个ProfileAnswer的用户。