堆栈是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
我希望在用户输入自动填充查询框时获得以下类型的结果,因此需要快速:
如果用户输入s
,我希望显示前两项。
我认为利用Elasticsearch最有意义,但是对于上面提到的堆栈,我对其他解决方案持开放态度。一个ES完成建议器将是辉煌的(并且快!),但我不确定如何按位置和类似分组数据 来自PostgreSQL的活动名称以便为其编制索引。也许我错过了更好的方法?
此时我有点陷入困境。
我认为这种情况很接近(参见Conditional group by (group similar items) in PostgreSQL),但它依赖于name
列的内容是相同的,而不仅仅是从类似的单词/字符开始。
答案 0 :(得分:0)
我没有尝试过这个,但您可以利用pg_trgm
或fuzzystrmatch
模块之类的东西。
看一下这个问题的答案,它可能会对你有所帮助:Finding similar strings with PostgreSQL quickly