如何使用 elasticsearch 的 SimpleQueryString 函数?

How do i use SimpleQueryString function of elasticsearch?

我正在尝试编写一个 django 应用程序,并在其中使用 elasticsearch 和 python 的 elasticsearch-dsl 库。我不想创建所有 switch-case 语句,然后相应地传递搜索查询和过滤器。

我想要一个自己进行解析的函数。 例如如果我通过 "some text url:github.com tags:es,es-dsl,django", 该函数应输出相应的查询。

我在 elasticsearch-dsl 文档中搜索它并找到了一个进行解析的函数。 https://github.com/elastic/elasticsearch-dsl-py/search?utf8=%E2%9C%93&q=simplequerystring&type= 但是,我不知道如何使用它。 我试过 s = Search(using=client).query.SimpleQueryString("1st|ldnkjsdb"),但显示解析错误。

谁能帮帮我?

我猜你是在询问 elasticsearch-dsl 与查询字符串的用法,就像你正在向 elasticsearch api 发出带有 json 数据的请求一样。如果是这样的话,这就是你将如何使用 elasticsearch-dsl:

假设您在 query 变量中有这样的查询:

{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "this AND that OR thus"
        }
    }
}

现在执行此操作:

es = Elasticsearch(
    host=settings.ELASTICSEARCH_HOST_IP, # Put your ES host IP
    port=settings.ELASTICSEARCH_HOST_PORT, # Put yor ES host port
)
index = settings.MY_INDEX # Put your index name here
result = es.search(index=index, body=query)

您可以只将 SimpleQueryString 插入 Search 对象,而不是字典将元素作为对象的参数发送。

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
from elasticsearch_dsl.query import SimpleQueryString

client = Elasticsearch()
_search = Search(using=client, index='INDEX_NAME')

_search = _search.filter( SimpleQueryString(
     query = "this + (that | thus) -those", 
     fields= ["field_to_search"],
     default_operator= "and"
))

很多elasticsearch_dsl简单地将字典表示更改为类函数,使代码看起来像pythonic,并避免使用难以阅读的elasticsearch JSON。