干草堆& ElasticSearch:搜索相关字段;使用嵌套类型?

时间:2014-01-21 04:56:30

标签: python elasticsearch django-haystack

我在弹性搜索中使用django-haystack。我的索引文档每个都有许多人的名字,每个人都有与文档相关的角色。例如:

Doc1:
   name='Bob',  role='Author'
   name='Jill', role='Editor'
   name='Joe',  role='Publisher'

Doc2:
   name='Jill',  role='Author'
   name='Phill', role='Editor'
   name='Janet', role='Contributor'

如何设置索引以允许我进行搜索:“查找JillAuthor”的所有文档?在上面的示例中,我希望它仅返回Doc2 Doc1

一个人可以拥有数百种不同类型的角色,因此为每种类型设置一个索引字段是不现实的。我想过将单个索引字段连接在一起(例如name_role=indexes.CharField(...)),其中每个条目都有一个我要解析的分隔符(例如"Jill#Author")。但这看起来很难看。

有没有更好的方法来做到这一点?我觉得ElasticSearch's nested type可能会有所帮助,但我不确定。

即使我正在使用django-haystack,如果有一个弹性搜索特定的答案,我会很高兴听到它。

1 个答案:

答案 0 :(得分:2)

事实上,ElasticSearch的{​​{1}}类型对于简化这项工作至关重要。这不是django-haystack默认支持的(因为它是特定于ES的),但是可以通过扩展一些haystack的类来支持这个功能。

有一个blog post可以清楚地解释这一点(以及可以分叉的gist)。

巧合的是,我写过这篇文章并且@speedplane已经找到了它,但是嘿..; - )