python - Haystack 和 ElasticSearch : Searching Related Fields; Use nested Type?

标签 python elasticsearch django-haystack

我在 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/

相关文章:

python - django haystack/whoosh : find records with umlauts/diaeresis, 带有简单的 ascii 查询

python - 在 Mechanize 中识别浏览器警报消息 - Python

python - 如何正确卸载Anaconda?

python - 在 Dart 中,Python 的 try...catch...else 最惯用的替代方法是什么?

amazon-web-services - Elasticsearch 阶段 : [query] 的所有分片均失败

django - 如何使用 Django-Haystack 预先选择构面(即在页面加载时选中复选框)?

python - 在 pandas 中计算阿隆指标的有效方法

elasticsearch - Elasticsearch:获得称赞

java - 一个程序中有多个Elasticsearch连接

python - 如何通过相关模型过滤 Haystack SearchQuerySets