我正在尝试编写一个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")
,但它向我展示了解析错误。
任何人都可以帮助我吗?
答案 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)