Search code examples
pythondjangoelasticsearchelasticsearch-dsl

How do i use SimpleQueryString function of elasticsearch?


I am trying to write a django app and use elasticsearch in it with elasticsearch-dsl library of python. I don't want to create all switch-case statements and then pass search queries and filters accordingly.

I want a function that does the parsing stuff by itself. For e.g. If i pass "some text url:github.com tags:es,es-dsl,django", the function should output corresponding query.

I searched for it in elasticsearch-dsl documentation and found a function that does the parsing. https://github.com/elastic/elasticsearch-dsl-py/search?utf8=%E2%9C%93&q=simplequerystring&type= However, I dont know how to use it. I tried s = Search(using=client).query.SimpleQueryString("1st|ldnkjsdb"), but it is showing me parsing error.

Can anyone help me out?


Solution

  • You can just plug the SimpleQueryString in the Search object, instead of a dictionary send the elements as parameters of the object.

    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"
    ))
    

    A lot of elasticsearch_dsl simply change the dictionary representation to classes of functions that makes the code look pythonic, and avoid the use of hard-to-read elasticsearch JSONs.