top | item 7769481

Show HN: PyEQS – query Elasticsearch like a Django Queryset

55 points| andrewgross | 11 years ago |github.com

24 comments

order

spencera|11 years ago

We are currently working on an official QuerySet-like python library here at Elasticsearch:

https://github.com/elasticsearch/elasticsearch-dsl-py

honzakral|11 years ago

Yes, the goal is similar - to provide a nice API without limiting any of the possibilities. It's much less restrictive (doesn't whitelist parameters) and tries not to force you to learn both Elasticsearch's query language and a DSL on top of by staying close to the original api.

It's currently work in progress but you can already see in tests some of the features like chainable API, composing queries and filters and aggregations:

https://github.com/elasticsearch/elasticsearch-dsl-py/blob/m...

I try to work closely with the fine people at Mozilla currently maintaining ElasticUtils to make sure there is a nice migration path and I don't miss anything obvious. Any feedback would be more than welcome (github, twitter, email, irc #elasticsearch-py, carrier pigeon, ...)!

akoumjian|11 years ago

Hi Yipit folks! It's Alec, from the Seattle Django group. We also developed something like this internally at Nimia due to the exact same use case: needing to access certain types of queries that didn't fit for haystack. Looks like we should have open sourced it so we could have collaborated.

coolsunglasses|11 years ago

If you'd like something that tackles the challenge of making the Elasticsearch JSON API explicit:

http://github.com/bitemyapp/bloodhound/

(Intended to act as a guide as well as a practical ES client)

andrewgross|11 years ago

Thanks for sharing this, didn't know about it. Always nice to see how other people tackle the same issue.

zmsmith|11 years ago

I work with Andrew at Yipit. As he mentioned in a comment below, we're using features of Elasticsearch that aren't (and probably shouldn't be) exposed by haystack, and some of the query building started to get a little messy.

I'm excited Andrew decided to work on this during our last hackathon and that now we're able to share it with the community.

We've been really happy with Elasticsearch. Hopefully this library will help more people leverage Elasticsearch in their python projects.

jaegerpicker|11 years ago

I'll have to play with it, currently we use the SearchQuerySet api provided by django_haystack to query Elasticsearch and it works pretty well for us.

andrewgross|11 years ago

We used to use Haystack, but found it a bit too opinionated for us once we wanted to do some custom stuff. It is a bit more faithful to the Django queryset API, something we had to abandon to let us use more of the complex Elasticsearch query features.

sjaaktrekhaak|11 years ago

Is the precommit hook[1] a custom one or is it an off-the-shelf Django recommended hook? Looks like it has some neat tricks and code style checking.

[1]: https://github.com/Yipit/pyeqs/blob/master/pre-commit

andrewgross|11 years ago

It is a modified version of what we use at Yipit. I stripped out mostly things related to working with Django/Flask apps. It comes in very handy when making sure we maintain style and push fewer broken commits. Feel free to re-use.

andrewstuart|11 years ago

Python 2 only?

andrewgross|11 years ago

Good point, I will have to swap out some testing libs but should be possible.