我正在尝试添加一个完成提示器,以便在Django应用程序(使用弹性搜索5.2.x和弹力搜索-dsl)中为搜索字段启用“按你搜索”类型。在尝试了很长一段时间后,我还无法弄清楚如何对建议者进行大容量索引。这是我的密码:
class SchoolIndex(DocType):
name = Text()
school_type = Keyword()
name_suggest = Completion()批量索引如下:
def bulk_indexing():
SchoolIndex.init(index="school_index")
es = Elasticsearch()
bulk(client=es, actions=(a.indexing() for a in models.School.objects.all().iterator()))并在models.py中定义了一个索引方法:
def indexing(self):
obj = SchoolIndex(
meta = {'id': self.pk},
name = self.name,
school_type = self.school_type,
name_suggest = {'input': self.name } <--- # what goes in here?
)
obj.save(index="school_index")
return obj.to_dict(include_meta=True)根据ES 文档,建议与任何其他字段一样被编入索引。因此,我只需在上面的name_suggest =语句中添加几个术语,就可以在搜索时匹配相应的字段。但我的问题是如何用大量的记录来做到这一点?我猜会有一种标准的方法让ES自动想出一些可以用作建议的术语。例如:用短语中的每一个词作为一个术语。我可以自己想出类似的东西(通过将每个短语分解成单词),但是单独这样做似乎有违直觉,因为我猜已经有一种默认的方式,如果需要的话,用户可以进一步调整。但是在搜索了相当一段时间之后,在SO/blog/ES docs/elasticsearch-dsl文档上找不到类似的东西。(不过,亚当·沃蒂斯( Adam )的这帖子对让我开始很有帮助)。会感谢你的指点。
发布于 2017-05-09 06:12:16
我想我想出来了(..phew)
在索引函数中,我需要使用以下方法来启用前缀完成提示器:
name_suggest = self.name而不是:
name_suggest = {'input': something.here }这似乎被用于更多的定制案例。
感谢这段视频的帮助!
https://stackoverflow.com/questions/43861059
复制相似问题