- Added support for quantized dense vector options (#1948)
- Added support for composable index templates (#1943)
- Support pipe syntax to declare optional document fields (#1937)
- Ignore document attributes typed with
ClassVar
(#1936) - Support Python 3.13 (#1938)
- Fixed the use of dictionaries as values in
Terms
query (#1920)
- Fixed regression introduced in
Terms
query class (#1907) - Removed unnecessary
filter
argument inAggBase.__getitem__
(#1903) - Fixed deserialization of
datetime.date
fields (#1914)
- Added support for any iterables to The
Terms
query (#1887) - Added back support for tuples and other iterables to
Search.source()
method (#1895) - Added recursive option to
AttrDict.to_dict()
(#1892) - Removed unused analyzer from search as you type example (#1883)
- Added support for the
semantic_text
field andsemantic
query type (#1881) - Removed extra
__orig_class__
attribute in aggregation responses (#1877)
- Added the option to use Python types to declare document fields (#1845)
- Added type annotations (#1533)
- Added support for bulk document operations with
Document.bulk()
(#1864) - Added the
ConstantKeyword
field to the top-level package (#1843) - Added
async_connections
to the top-level package (#1865) - Added index creation to the aggregations example (#1862)
- Added
text_expansion
query clause (#1837) - Added
Response.search_after()
andSearch.search_after()
methods for efficient iteration (#1829) - Added point in time support and the
iterate()
method in theSearch
class (#1833) - Added support for slicing multiple times in
Search
class (#1771) Added support for regular expressions inCompletion.suggest()
(#1836) - Fixed
suggest()
method of theCompletion
class to format requests correctly. (#1836) - Fixed
Document.update()
to accept fields set toNone
or empty (#1820)
- Added support for
knn
as a query option (#1770) - Made the
dims
attribute of the dense vector type optional (#1776) - Added missing
inner_hits
option tosearch.knn()
method (#1777) - Added support for detecting document updates in
InnerDoc
attributes (#1535) - Changed
_expand__to_dot
setting to resolve at runtime (#1633) - Added explicit error message when unsupported
minimum_should_match
values are used (#1774) - Added the
EmptySearch
class (#1780) - Added
params
option to theFacetedSearch
object (#1500) - Added support for passing a dictionary in the
script
option for a document update (#1560) - Added
keys()
anditems()
methods toAttrDict
class (#1784) - Added a
to_list()
method to theAttrList
class (#1584) - Fixed various documentation issues and typos (#1769, #1615, #1585, #1318, #1223)
- Added a vector search example (#1778)
- Added
asyncio
support (#1714) - Dropped support for Python 3.7 (#1717)
- Stopped mixing body and parameters in
UpdateByQuery
(#1702)
- Added
Search.knn()
method (#1691) - Added
Search.rank()
method (undocumented as it still is in technical preview) (#1692) - Fixed importing collapse from dictionary (#1689)
- Added Elasticsearch 8.x support (#1664)
- Dropped support for Python 2.7 and 3.5 (#1606, contributed by @hugovk)
- Added support for Python 3.10 and 3.11 (#1608, contributed by @hugovk)
- Added the
MultiTerms
aggregation (#1543, contributed by @Telomeraz) - Added the
CombinedFields
query (#1557, contributed by @Telomeraz)
- Fixed
DeprecationWarnings
that would be emitted from deprecated usages of thebody
parameter in the Python Elasticsearch client.
- Added the
ConstantKeyword
,RankFeatures
field types (#1456, #1465) - Added the
ScriptScore
query type (#1464) - Added
UpdateByQueryResponse.success()
method (#1463) - Added
return_doc_meta
parameter toDocument.save()
andDocument.update()
for accessing the complete API response (#1466) - Added support for
calendar_interval
andfixed_interval
toDateHistogramFacet
(#1467) - Added
Document.exists()
method (#1447, contributed by @dem4ply) - Added support for the
year
interval toDateHistogramFacet
(#1502, contributed by @nrsimha) - Fixed issue where
to_dict()
should be called recursively onSearch.extras
and**kwargs
(#1458) - Fixed inverse of an empty
Bool
query should beMatchNone
(#1459) - Fixed issue between
retry_on_conflict
and optimistic concurrency control withinDocument.update()
(#1461, contributed by @armando1793)
- Added
Intervals
,MatchBoolPrefix
,Shape
, andWrapper
queries (#1392, #1418) - Added
Boxplot
,RareTerms
,VariableWidthHistogram
,MedianAbsoluteDeviation
,TTest
,CumulativeCardinality
,Inference
,MovingPercentiles
, andNormalize
aggregations (#1416, #1418) - Added
__all__
and removed all star imports fromelasticsearch_dsl
namespace to avoid leaking unintended names (#1390) - Fixed an issue where
Object
andNested
could mutate the innerdoc_class
mapping (#1255, contributed by @l1nd3r0th) - Fixed a typo in query
SpanContaining
, previously wasSpanContainining
(#1418)
- Fixed issue when slicing a Search that would result in a negative
size
instead of asize
of 0. (#1360, contributed by @bk-equityzen)
- Added support for
geotile_grid
aggregation (#1350, contributed by @owrcasstevens) - Added the
DenseVector
andSparseVector
data types (#1278) - Added the
SearchAsYouType
field (#1295, contributed by @dpasqualin) - Fixed name of
DoubleRange
(#1272, contributed by @braunsonm)
- Optimistic concurrent control for Document.delete
- Removing deprecated
DocType
- Proper count caching for ES 7.x
- Support for
multiplexer
token filter - Don't substitute for
__
inFacetedSearch
- Compatibility with Elasticsearch 7.x
Document.save()
now returns"created"
or"updated"
- Dropped support for Python 2.6, 3.2, and 3.3
- When using
fields
the values are no longer merged into the body of the document and have to be accessed via.meta.fields
only
Index.document
now correctly sets theDocument
's_index
only when using default index (#1091
)Document
inheritance allows overridingObject
andNested
field metadata likedynamic
- adding
auto_date_histogram
aggregation - Do not change data in place when (de)serializing
Analyzer.simulate
now supports built-in analyzers- proper (de)serialization of the
Range
wrapper - Added
search_analyzer
toCompletion
field
- Fixed logic around defining a different
doc_type
name. - Added
retry_on_conflict
parameter toDocument.update
. - fields defined on an index are now used to (de)serialize the data even when
not defined on a
Document
- Allow
Index.analyzer
to construct the analyzer - Detect conflict in analyzer definitions when calling
Index.analyzer
- Detect conflicting mappings when creating an index
- Add
simulate
method toanalyzer
object to test the analyzer using the_analyze
API. - Add
script
andscript_id
options toDocument.update
Facet
can now use other metric thandoc_count
Range
objects to help with storing and working with_range
fields- Improved behavior of
Index.save
where it does a better job when index already exists - Composite aggregations now correctly support multiple
sources
aggs UpdateByQuery
implemented by @emarcey
- allow users to redefine
doc_type
inIndex
(#929
) - include
DocType
inelasticsearch_dsl
module directly (#930
)
Backwards incompatible change - DocType
refactoring.
In 6.2.0
we refactored the DocType
class and renamed it to
Document
. The primary motivation for this was the support for types being
dropped from elasticsearch itself in 7.x
- we needed to somehow link the
Index
and Document
classes. To do this we split the options that were
previously defined in the class Meta
between it and newly introduced
class Index
. The split is that all options that were tied to mappings (like
setting dynamic = MetaField('strict')
) remain in class Meta
and all
options for index definition (like settings
, name
, or aliases
) got
moved to the new class Index
.
You can see some examples of the new functionality in the examples
directory. Documentation has been updated to reflect the new API.
DocType
is now just an alias for Document
which will be removed in
7.x
. It does, however, work in the new way which is not fully backwards
compatible.
Percolator
field now expectsQuery
objects as values- you can no longer access meta fields on a
Document
instance by specifying._id
or similar. Instead all access needs to happen via the.meta
attribute. - Implemented
NestedFacet
forFacetedSearch
. This brought a need to slightly change the semantics ofFacet.get_values
which now expects the whole data dict for the aggregation, not just thebuckets
. This is a backwards incompatible change for custom aggregations that redefine that method. Document.update
now supportsrefresh
kwargDslBase._clone
now produces a shallow copy, this means that modifying an existing query can have effects on existingSearch
objects.- Empty
Search
no longer defaults tomatch_all
query and instead leaves thequery
key empty. This is backwards incompatible when usingsuggest
.
- Removed
String
field. - Fixed issue with
Object
/Nested
deserialization
Fixing wheel package for Python 2.7 (#803)
Backwards incompatible release compatible with elasticsearch 6.0, changes include:
use
doc
as defaultDocType
name, this change includes: *DocType._doc_type.matches
method is now used to determine whichDocType
should be used for a hit instead of just checking_type
Nested
andObject
field refactoring using newly introducedInnerDoc
class. To define aNested
/Object
field just define theInnerDoc
subclass and then use it when defining the field:class Comment(InnerDoc): body = Text() created_at = Date() class Blog(DocType): comments = Nested(Comment)methods on
connections
singleton are now exposed on theconnections
module directly.field values are now only deserialized when coming from elasticsearch (via
from_es
method) and not when assigning values in python (either by direct assignment or in__init__
).
- fix
ip_range
aggregation and rename the class toIPRange
.Iprange
is kept for bw compatibility- fix bug in loading an aggregation with meta data from dict
- add support for
normalizer
parameter ofKeyword
fieldsIndexTemplate
can now be specified using the same API asIndex
Boolean
field now accepts"false"
asFalse
- fix constant score query definition
DateHistogramFacet
now works withdatetime
objects- respect
__
in field names when creating queries from dict
- make sure all response structers are pickleable (for caching)
- adding
exclude
toSearch
- fix metric aggregation deserialization
- expose all index-level APIs on
Index
class- adding
delete
toSearch
which callsdelete_by_query
API
- Renamed
Result
andResultMeta
toHit
andHitMeta
respectivelyResponse
now storesSearch
which it gets as first arg to__init__
- aggregation results are now wrapped in classes and properly deserialized
Date
fields now allow for numerical timestamps in the java format (in millis)- Added API documentation
- replaced generated classes with manually created
Version compatible with elasticsearch 5.0.
Breaking changes:
String
field type has been deprecated in favor ofText
andKeyword
fields
method has been removed in favor ofsource
filtering
- accessing missing string fields no longer returned
''
but returnsNone
instead.- fix issues with bool's
|
and&
operators andminimum_should_match
inner_hits
are now also wrapped inResponse
+
operator is deprecated,.query()
now uses&
to combine queries- added
mget
method toDocType
- fixed validation for "empty" values like
''
and[]
Compatibility with Elasticsearch 2.x:
- Filters have been removed and additional queries have been added. Instead of
F
objects you can now useQ
.Search.filter
is now just a shortcut to add queries in filter context- support for pipeline aggregations added
Backwards incompatible changes:
- list of analysis objects and classes was removed, any string used as tokenizer, char or token filter or analyzer will be treated as a builtin
- internal method
Field.to_python
has been renamed todeserialize
and an optional serialization mechanic for fields has been added.- Custom response class is now set by
response_class
method instead of a kwarg toSearch.execute
Other changes:
FacetedSearch
now supports pagination via slicing
Search
can now be iterated over to get back hitsSearch
now caches responses from ElasticsearchDateHistogramFacet
now defaults to returning empty intervalsSearch
no longer accepts positional parameters- Experimental
MultiSearch
API- added option to talk to
_suggest
endpoint (execute_suggest
)
FacetedSearch
now uses its ownFacet
class instead of built in aggregations
0.0.5
and0.0.6
was released with broken .tar.gz on pypi, just a build fix
- added support for (index/search)_analyzer via #143, thanks @wkiser!
- even keys accessed via
['field']
onAttrDict
will be wrapped inAttr[Dict|List]
for consistency- Added a convenient option to specify a custom
doc_class
to wrap inner/Nested documentsblank
option has been removedAttributeError
is no longer raised when accessing an empty field.- added
required
flag to fields and validation hooks to fields and (sub)documents- removed
get
method fromAttrDict
. Usegetattr(d, key, default)
instead.- added
FacetedSearch
for easy declarative faceted navigation
- Metadata fields (such as id, parent, index, version etc) must be stored (and retrieved) using the
meta
attribute (#58) on bothResult
andDocType
objects or using their underscored variants (_id
,_parent
etc)- query on Search can now be directly assigned
suggest
method added toSearch
Search.doc_type
now acceptsDocType
subclasses directlyProperties.property
method renamed tofield
for consistency- Date field now raises
ValidationException
on incorrect data
Added persistence layer (Mapping
and DocType
), various fixes and
improvements.
Fix for python 2
Initial release.