根据1列

时间:2015-08-17 21:04:23

标签: sphinx thinking-sphinx

我有一个表需要进行搜索,这个表是通过另外两个表之间的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.textposts.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搜索后编写过滤器,它必须写入查询。

2 个答案:

答案 0 :(得分:0)

关于执行此操作的唯一方法是安排thread.text列在除一个帖子(例如第一个)之外的所有帖子上都是空白的,这样与线程标题的关键字匹配只能匹配一个帖子。

(但你不能得到匹配,有些词匹配标题,有些匹配帖子文字,除了第一篇文章之外的任何内容)

...也不确定如何在ThinkingSphinx中安排这个。

答案 1 :(得分:0)

不是真正的解决方案,但我最后只是添加了另一个索引并从其他索引中删除了title字段。