Skip to content

Commit 08fa0fa

Browse files
committed
support filter function against ES version >= 5.0
1 parent cab00b2 commit 08fa0fa

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
### 0.4.0
22

3+
* support filter function against ES version >= 5.0
34
* support customized terms aggregation: `df.groupby(df.age.terms(limit=10, include=[1, 2, 3]))`
45

56
### 0.3.0

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ df.filter(ScriptFilter('2016 - doc["age"].value > 1995')).collect()
106106
# [Row(age=12,name='Alice'), Row(age=13,name='Leo')]
107107
```
108108

109+
**5.0 compatibility**: By default, pandasticsearch use `filtered` query (deprecated since 5.0).
110+
To use pandasticsearch against the latest ES version, a `compat` arg can be passed to `from_es`:
111+
112+
```
113+
df = DataFrame.from_es(url='http://localhost:9200', index='people', compat=5)
114+
```
115+
109116

110117
### Aggregation
111118
```python

pandasticsearch/dataframe.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ def __init__(self, **kwargs):
3838
self._index = list(self._mapping.keys())[0] if self._mapping else None
3939
self._doc_type = DataFrame._get_doc_type(self._mapping) if self._mapping else None
4040
self._columns = sorted(DataFrame._get_cols(self._mapping)) if self._mapping else None
41-
4241
self._filter = kwargs.get('filter', None)
4342
self._groupby = kwargs.get('groupby', None)
4443
self._aggregation = kwargs.get('aggregation', None)
4544
self._sort = kwargs.get('sort', None)
4645
self._projection = kwargs.get('projection', None)
4746
self._limit = kwargs.get('limit', None)
47+
self._compat = kwargs.get('compat', 2)
4848
self._last_query = None
4949

5050
@property
@@ -448,7 +448,10 @@ def _build_query(self):
448448
query['size'] = 0
449449

450450
if self._filter:
451-
query['query'] = {'filtered': {'filter': self._filter}}
451+
if self._compat == 5:
452+
query['query'] = {'bool': {'filter': self._filter}}
453+
else:
454+
query['query'] = {'filtered': {'filter': self._filter}}
452455

453456
if self._projection:
454457
query['_source'] = {"includes": [col.field_name() for col in self._projection], "excludes": []}

0 commit comments

Comments
 (0)