我有一个User
模型,可以将ProfileAnswer
与has_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})
我尝试索引这些列的某些组合并搜索但从未生成过正确的索引。
答案 0 :(得分:0)
Answered this思科Sphinx Google小组也是如此:
您尝试做的事情是不可能的(至少在搜索用户时)。 Sphinx没有哈希/词典的概念......在你的索引中,每个用户都有一个名为answer的字段,其中包含在一个字符串中连接在一起的所有答案,然后是一个问题ID数组的属性。问题ID和每个答案之间没有关系。
更好的方法是在ProfileAnswer上定义索引,然后通过它进行搜索 - 然后在搜索结果中显示每个ProfileAnswer的用户。