0

我正在尝试添加一个完成建议器,以便为我的 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文档,建议像任何其他字段一样被编入索引。因此,我可以name_suggest =在我的代码中的上述语句中添加一些术语,这些术语在搜索时将匹配相应的字段。但我的问题是如何处理大量记录?我猜想 ES 会有一种标准的方式来自动提出一些可以用作建议的术语。例如:使用短语中的每个单词作为术语。我可以自己想出类似的东西(通过将每个短语分解成单词),但我自己这样做似乎违反直觉,因为我猜已经有一种默认方式,用户可以在需要时进一步调整. 但是在搜索了一段时间后,在 SO/blogs/ES docs/elasticsearch-dsl docs 上找不到类似的东西。(这个Adam Wattis 的帖子对我开始很有帮助)。将不胜感激任何指针。

4

1 回答 1

1

我想我想通了(..phew)

在索引功能中,我需要使用以下内容来启用前缀完成建议器:

name_suggest = self.name

代替:

name_suggest = {'input': something.here }

这似乎用于更多自定义案例。

感谢这个帮助的视频

于 2017-05-09T06:12:16.630 回答