@@ -44,32 +44,6 @@ def __or__(self, other):
44
44
45
45
EMPTY_QUERY = MatchAll ()
46
46
47
- class Match (Query ):
48
- name = 'match'
49
-
50
- class MultiMatch (Query ):
51
- name = 'multi_match'
52
-
53
- class QueryString (Query ):
54
- name = 'query_string'
55
-
56
- class Fuzzy (Query ):
57
- name = 'fuzzy'
58
-
59
- class Prefix (Query ):
60
- name = 'prefix'
61
-
62
- class Term (Query ):
63
- name = 'term'
64
-
65
- class HasChild (Query ):
66
- name = 'has_child'
67
- _param_defs = {'query' : {'type' : 'query' }}
68
-
69
- class HasParent (Query ):
70
- name = 'has_parent'
71
- _param_defs = {'query' : {'type' : 'query' }}
72
-
73
47
class Bool (BoolMixin , Query ):
74
48
name = 'bool'
75
49
_param_defs = {
@@ -81,13 +55,6 @@ class Bool(BoolMixin, Query):
81
55
# register this as Bool for Query
82
56
Query ._bool = Bool
83
57
84
- class Filtered (Query ):
85
- name = 'filtered'
86
- _param_defs = {
87
- 'query' : {'type' : 'query' },
88
- 'filter' : {'type' : 'filter' },
89
- }
90
-
91
58
class FunctionScore (Query ):
92
59
name = 'function_score'
93
60
_param_defs = {
@@ -105,3 +72,62 @@ def __init__(self, **kwargs):
105
72
if name in kwargs :
106
73
fns .append ({name : kwargs .pop (name )})
107
74
super (FunctionScore , self ).__init__ (** kwargs )
75
+
76
+ QUERIES = (
77
+ # compound queries
78
+ ('boosting' , {'positive' : {'type' : 'query' }, 'negative' : {'type' : 'query' }}),
79
+ ('constant_score' , {'query' : {'type' : 'query' }, 'filter' : {'type' : 'filter' }}),
80
+ ('dis_max' , {'queries' : {'type' : 'query' , 'multi' : True }}),
81
+ ('filtered' , {'query' : {'type' : 'query' }, 'filter' : {'type' : 'filter' }}),
82
+ ('indices' , {'query' : {'type' : 'query' }, 'no_match_query' : {'type' : 'query' }}),
83
+
84
+ # relationship queries
85
+ ('nested' , {'query' : {'type' : 'query' }}),
86
+ ('has_child' , {'query' : {'type' : 'query' }}),
87
+ ('has_parent' , {'query' : {'type' : 'query' }}),
88
+ ('top_children' , {'query' : {'type' : 'query' }}),
89
+
90
+ # compount span queries
91
+ ('span_first' , {'match' : {'type' : 'query' }}),
92
+ ('span_multi' , {'match' : {'type' : 'query' }}),
93
+ ('span_near' , {'clauses' : {'type' : 'query' , 'multi' : True }}),
94
+ ('span_not' , {'exclude' : {'type' : 'query' }, 'include' : {'type' : 'query' }}),
95
+ ('span_or' , {'clauses' : {'type' : 'query' , 'multi' : True }}),
96
+
97
+ # core queries
98
+ ('common_terms' , None ),
99
+ ('fuzzy' , None ),
100
+ ('fuzzy_like_this' , None ),
101
+ ('fuzzy_like_this_field' , None ),
102
+ ('geo_shape' , None ),
103
+ ('ids' , None ),
104
+ ('match' , None ),
105
+ ('more_like_this' , None ),
106
+ ('more_like_this_field' , None ),
107
+ ('multi_match' , None ),
108
+ ('prefix' , None ),
109
+ ('query_string' , None ),
110
+ ('range' , None ),
111
+ ('regexp' , None ),
112
+ ('simple_query_string' , None ),
113
+ ('span_term' , None ),
114
+ ('template' , None ),
115
+ ('term' , None ),
116
+ ('terms' , None ),
117
+ ('wildcard' , None ),
118
+ )
119
+
120
+ def _make_query_class (name , params_def = None ):
121
+ """
122
+ Generate a query class based on the name of the query and it's parameters
123
+ """
124
+ attrs = {'name' : name }
125
+ if params_def :
126
+ attrs ['_param_defs' ] = params_def
127
+ cls_name = '' .join (s .title () for s in name .split ('_' ))
128
+ globals ()[cls_name ] = type (cls_name , (Query , ), attrs )
129
+
130
+ # generate the query classes dynamicaly
131
+ for qname , params_def in QUERIES :
132
+ _make_query_class (qname , params_def )
133
+
0 commit comments