From b78b6486829f748daf42d6240426abb44d8329a5 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Sun, 22 Jun 2014 21:07:09 +0100 Subject: [PATCH] Implemented __in lookup in ElasticSearch backend Also added an error message if a user attempts to use a subquery with the __in lookup. --- wagtail/wagtailsearch/backends/elasticsearch.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 8f17ba6ce..289b0f4b2 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -3,6 +3,7 @@ from __future__ import absolute_import import json from django.db import models +from django.db.models.sql.where import SubqueryConstraint from elasticsearch import Elasticsearch, NotFoundError, RequestError from elasticsearch.helpers import bulk @@ -201,7 +202,16 @@ class ElasticSearchQuery(object): } } - raise FilterError('Could not apply filter on ElasticSearch results "' + field_name + '__' + lookup + ' = ' + unicode(value) + '". Lookup "' + lookup + '"" not recognosed.') + if lookup == 'in': + return { + 'terms': { + field_index_name: value, + } + } + + raise FilterError('Could not apply filter on ElasticSearch results: "' + field_name + '__' + lookup + ' = ' + unicode(value) + '". Lookup "' + lookup + '"" not recognosed.') + elif isinstance(where_node, SubqueryConstraint): + raise FilterError('Could not apply filter on ElasticSearch results: Subqueries are not allowed.') # Get child filters connector = where_node.connector