我在 Elasticsearch 上使用 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'
如何设置索引以允许我进行搜索:“查找 Jill
是 作者
的所有文档”?在上面的示例中,我希望它仅返回 Doc2
而不 Doc1
。
一个人可以拥有数百种不同类型的角色,因此为每种类型都有一个索引字段是不现实的。我考虑过使用一个索引字段将两者连接在一起(例如,name_role=indexes.CharField(...)
),其中每个条目都有一个我要解析的分隔符(例如, “吉尔#作者”
)。但这看起来很丑。
有没有更好的方法来做到这一点?我感觉像ElasticSearch's nested
type也许可以提供帮助,但我不确定。
即使我使用的是 django-haystack,如果有一个针对 elasticsearch 的具体答案,我很乐意听到。
最佳答案
事实上,ElasticSearch 的嵌套
类型对于使其顺利工作至关重要。 django-haystack 默认不支持此功能(因为它是 ES 特定的),但可以通过扩展 haystack 的一些类来支持此功能。
有一个blog post这非常清楚地解释了这一点(以及可以 fork 的gist)。
巧合的是,我写了这篇文章,@speedplane 已经找到了它,但是嘿..;-)
关于python - Haystack 和 ElasticSearch : Searching Related Fields; Use nested Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249483/