Python 干草堆及;ElasticSearch:搜索相关字段;使用嵌套类型?
我正在使用django haystack进行弹性搜索。我的索引文档每个都有许多人的名字,对于每个人,他们的角色与文档关联。例如:Python 干草堆及;ElasticSearch:搜索相关字段;使用嵌套类型?,python,elasticsearch,django-haystack,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',
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\u role=index.CharField(…)
),其中每个条目都有一个我要解析的分隔符(例如,“Jill#Author”
)。但这看起来很难看
有没有更好的方法?我觉得我能帮上忙,但我不确定
即使我使用的是django haystack,如果有elasticsearch特定的答案,我也会很高兴听到它。事实上,elasticsearch的
嵌套的类型对于整洁地工作是必不可少的。django haystack默认不支持此功能(因为它特定于ES),但可以通过扩展haystack的一些类来支持此功能
有一种方法可以非常清楚地解释这一点(也有一种方法可以分叉)
巧合的是,我写了这封信,@speedplane已经找到了,但是嘿…-) 我发现的一个问题是,不能对嵌套类型使用镶嵌面或聚合。我能够解决这个问题,但它需要更改为UnifiedIndex.get_facet\u fieldname
interest。。不过,看起来子类化UnifiedIndex
会非常烦人。你对修改后的get\u facet\u fieldname
进行了monkeypatch吗?我不想对那个野兽进行子类化,所以我只是对它进行了monkeypatch。我会考虑提交一个官方补丁,但我非常怀疑它会被接受。是的,我不太确定海草ES的后端开发是怎么回事。不过,看看你的变通方法会很有趣!也许在一个叉子里?