我如何使用elasticsearch的SimpleQueryString函数?

时间:2018-05-22 19:21:30

标签: python django elasticsearch elasticsearch-dsl

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

我想要一个能够自己解析东西的函数。 对于例如如果我通过“some text url:github.com标签: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"),但它向我展示了解析错误。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您只需将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。

答案 1 :(得分:0)

我猜你是在询问有关使用查询字符串的elasticsearch-dsl的用法,就像你正在使用json数据向elasticsearch api发出请求。如果是这种情况,那么您将使用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)