【发布时间】:2015-08-17 21:04:23
【问题描述】:
我有一个需要搜索的表,该表是通过其他 2 个表之间的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 搜索之后编写一个过滤器,它必须写入查询中。
【问题讨论】: