2013-08-12 113 views
0

我想实现各种电子商店提供的自动完成功能。功能非常简单,当你键入一些字符时,它开始显示相关的建议。
我使用solr(django-haystack)实现它,使用haystack.query.SearchQuerySet中提供的自动完成方法。基本上,我得到按比分排序的结果列表。显示前n个结果作为建议。
Solr文档包含$ product_name,$ category_name和其他字段。所以我生成的结果看起来像是“in”的列表。
当我更改类别名称时出现问题。如果我更改类别名称,则必须更新属于该特定类别的所有产品以反映自动完成中的这些更改(更新此类别产品的所有文档)。
另一种方法是将产品类别的id放在solr文档中。在这种情况下,我每次都会查找类别名称,这样做效率不高。 有没有其他有效的方法来做到这一点?更有效地显示搜索结果?

+1

对不起,但这不是很清楚。你能更好地解释一下你的问题吗? –

+0

您是否可以将'Category Name'过滤器应用于您的自动建议查询? –

+0

@MaurizioIndenmark:我已经更新了这个问题,随时询问是否有不清楚的地方。 – ashish

回答

0

由于您正在更改基础数据,所以必须将其传播到SOLR。

有不同的方法来做到这一点:

  1. 更新数据库,并重新索引 - 优点:简单,缺点:索引时间可能很大。
  2. 串联更新数据库和Solr - 优点:快速更新,几乎是瞬间缺点:可能导致数据不一致(如果一次更新失败)
  3. 更新数据库并在Solr中安排增量导入。这就像两者之间的中间地带。

我会推荐第三种方法,但这需要一些前期的模式设计。阅读有关delta导入here的更多信息,在DataImportHandler的上下文中。