我有一个表需要进行搜索,这个表是通过另外两个表之间的join
形成的。
表ThinkingSphinx::Index
上定义了posts
,我的posts_index.rb
看起来像这样:
join 'LEFT JOIN threads on posts.id = threads.id'
indexes 'posts.text', as: posts_text
indexes 'threads.text', as: threads_text
和我的表:
threads
| id | text |
| 0 | test title |
| 1 | foo bar |
posts
| id | parent | text
| 0 | 0 | some stuff
| 1 | 0 | more stuff
我需要做的是在thread.text
和posts.text
上执行狮身人面像搜索。假设我对stuff
这个词进行搜索,这会回来
thread.id | posts.id | thread.text | posts.text |
0 | 0 | test title | some stuff |
0 | 1 | test title | more stuff |
这就是我需要的,但如果我搜索test
这个词,就会回来
thread.id | posts.id | thread.text | posts.text |
0 | 0 | test title | some stuff |
0 | 1 | test title | more stuff |
这不是我想要的,因为你可以看到返回了一个额外的不必要的行,在这种情况下我只想要第一行。我不能做group_by
,因为一个帖子可能有很多可能/可能不包含搜索词的帖子,我仍然需要返回所有被点击的posts
。我不想要某个重复结果的唯一时间是,如果搜索项仅在线程标题中找到。由于各种原因,我不能在sphinx搜索后编写过滤器,它必须写入查询。
答案 0 :(得分:0)
关于执行此操作的唯一方法是安排thread.text列在除一个帖子(例如第一个)之外的所有帖子上都是空白的,这样与线程标题的关键字匹配只能匹配一个帖子。
(但你不能得到匹配,有些词匹配标题,有些匹配帖子文字,除了第一篇文章之外的任何内容)
...也不确定如何在ThinkingSphinx中安排这个。
答案 1 :(得分:0)
不是真正的解决方案,但我最后只是添加了另一个索引并从其他索引中删除了title字段。