如何使用Elasticsearch-DSL执行此搜索?

时间:2019-07-18 04:43:15

标签: python elasticsearch

我正在尝试在ES 7中使用Elasticsearch-DSL Python。我将Django模型发送到带有InnerDoc的文档中,用于用户配置文件。在模型中,这是一个ManyToMany关系。

我想在Elasticsearch-DSL中形成一个查询,该查询可以通过单个查询在多种表单上执行MultiMatch,并过滤具有特定InnerDocs的匹配项,且其整数字段大于某个数值,并且得分大于某个阈值-并且布尔值上的错误匹配。在代码注释中解释。

我无法使用Elasticsearch-DSL的文档解决这个问题。即使可以访问InnerDoc中的数据,在访问InnerDoc时也会遇到关键错误。我已经搜索了所有内容,只想编写一个低级查询,但希望了解该库中的查询情况。

# profiles/documents.py
class ProfileDocument(InnerDoc):
    username = Text(fields={'raw': Keyword()})

    class Index:
        name = 'profiles'
# bookmarks/documents.py
class BookmarkDocument(Document):
    title = Text() # MultiMatch
    description = Text() # MultiMatch
    title_suggest = Completion()
    created = Date()
    last_crawled = Date()
    flagged = Boolean() # Boolean, must be false
    h1_tag = Text() # MultiMatch
    h2_tag = Text() # MultiMatch
    saves = Integer() # Must be above 0

    savers = Nested(ProfileDocument)

    class Index:
        name = 'bookmarks'

    def add_saver(self, username):
        self.savers.append(ProfileDocument(username=username))

    def save(self, **kwargs):
        return super().save(**kwargs)
# current (incomplete) search query
search = Search()

payload = MultiMatch(query=query,
    fields=['title',
            'description',
            'h1_tag',
            'h2_tag',])
search = search.query(payload)
search = search.execute()
result_list = search

我应该能够使用上述指定的过滤器。我不确定如何。

0 个答案:

没有答案