我正在尝试添加一个完成建议器,以便为我的Django应用程序中的搜索字段启用搜索类型(使用Elastic Search 5.2.x和elasticseach-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 docs,建议被索引为与任何其他字段一样 . 所以我可以在我的代码中的上面的 name_suggest =
语句中添加一些术语,这些术语在搜索时将匹配相应的字段 . 但我的问题是如何用大量的记录来做到这一点?我猜测ES会有一种标准的方式来自动提出一些可以用作建议的术语 . 例如:使用短语中的每个单词作为术语 . 我可以自己提出类似的东西(通过将每个短语分解为单词)但是我自己这样做似乎是违反直觉的,因为我在SO / blogs / ES docs / elasticsearch-dsl docs上找到了类似的东西 . 经过一段时间的搜索 . (This Adam Wattis的帖子对我开始非常有帮助) . 会欣赏任何指针 .
1 回答
我想我想通了(..phew)
在索引函数中,我需要使用以下内容来启用前缀完成建议器:
代替:
这似乎用于更多的自定义案例 .
感谢this video,这有帮助!