如何分组同名的项目?

时间:2014-06-29 21:12:13

标签: django postgresql elasticsearch

问题

堆栈是Django 1.6,PostgreSQL 9.3和Elasticsearch 1.2。在PostgreSQL中,我在表中有数据(为简洁起见,删除了大多数列):

Activity Name                              Location
=============                              ========
Swimming Lessons - Level 1                 Hothouse Pool
Swimming Lessons - Level 2                 Hothouse Pool
Swimming Lessons - Level 3                 Hothouse Pool
Swimming Lessons - Parent & Tot            Trinity Recreation Center
Swimming Lessons - Level 1                 Trinity Recreation Center
Swimming Lessons - Level 2                 Trinity Recreation Center
Swimming Lessons - Level 3                 Trinity Recreation Center
Swimming Lessons - Level 4                 Trinity Recreation Center
Swimming Lessons - Gold Certification      Hothouse Pool
Karate - White Belt                        Trinity Recreation Center
Karate - Yellow Belt                       Trinity Recreation Center
Karate - Black Belt                        Trinity Recreation Center

我希望在用户输入自动填充查询框时获得以下类型的结果,因此需要快速:

  • Hothouse Pool游泳课(4项)
  • Trinity娱乐中心的游泳课程(5项)
  • Trinity娱乐中心的空手道(3项)

如果用户输入s,我希望显示前两项。

我的想法

我认为利用Elasticsearch最有意义,但是对于上面提到的堆栈,我对其他解决方案持开放态度。一个ES完成建议器将是辉煌的(并且快!),但我不确定如何按位置和类似分组数据 来自PostgreSQL的活动名称以便为其编制索引。也许我错过了更好的方法?

此时我有点陷入困境。

编辑1:

我认为这种情况很接近(参见Conditional group by (group similar items) in PostgreSQL),但它依赖于name列的内容是相同的,而不仅仅是从类似的单词/字符开始。

1 个答案:

答案 0 :(得分:0)

我没有尝试过这个,但您可以利用pg_trgmfuzzystrmatch模块之类的东西。

看一下这个问题的答案,它可能会对你有所帮助:Finding similar strings with PostgreSQL quickly