【问题标题】:How to use query_string (Lucene Syntax) with Elasticsearch DSL in Python?如何在 Python 中将 query_string(Lucene 语法)与 Elasticsearch DSL 结合使用?
【发布时间】:2019-06-06 12:04:15
【问题描述】:

我想在 Python 的 Elasticsearch DSL 中使用 query_string(Lucene 语法)搜索。 不幸的是,第一行不像第二行那么容易:

s = Search(using=client, index='abc').query("query_string", doctext=searchstr).highlight('doctext', fragment_size=200)
s = Search(using=client, index='abc').query("match", doctext=searchstr).highlight('doctext', fragment_size=200)

我可以将 Elasticsearch DSL 库的哪个函数用于 query_string?

【问题讨论】:

    标签: python query-string elasticsearch-dsl


    【解决方案1】:

    您可以使用query_string,但您需要使用它在documentation 中定义的正确参数:

    s = Search(using=client, index='abc')
    s = s.query("query_string", query=searchstr, default_field="doctext") # note the query here
    s = s.highlight('doctext', fragment_size=200)
    

    另外请注意,将query_string 用于用户提供的输入可能很危险,因为无法限制用户在查询中可以执行的操作,并且他们可能会针对任何字段进行查询或制作一个超级昂贵的查询执行成本很高。

    希望这会有所帮助!

    【讨论】:

    • 我解决了这个问题:s = Search(using='default').from_dict({'query': {'query_string': {'default_field': 'doctext', "query": searchstr}}, 'highlight': {'fields': {'doctext': {'fragment_size': 200}}}}) 但你的回答也有效。
    • 我使用response.hits.total.value 获取总点击量。有一种方法可以在文档中获得点击量。你能给我一些提示如何使用它吗?我试过但没有用。 innerHits
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多