elasticutils/CHANGELOG

237 строки
6.6 KiB
Plaintext

==========================
What's new in ElasticUtils
==========================
.. contents::
:local:
Version 0.6: in development
===========================
**API-breaking changes:**
* **values_dict no longer always includes id.**
``values_dict`` no longer always includes an 'id' field in the
fields list if you don't specify it.
Specifying no fields now returns **all** fields::
S().values_dict()
Specifying fields now returns only those fields::
S().values_dict('name', 'number')
* **values_list no longer always includes id.**
``values_list`` no longer always includes an 'id' field in the
fields list if you don't specify it.
Specifying no fields now returns **all** fields::
S().values_list()
Specifying fields now returns data for those fields in the order
the fields are specified::
S().values_list('name', 'number')
* **Types have changed.**
This is a big change.
Up through ElasticUtils v0.5, `S` could take a type and that type was
a model. This is now completely different.
In ElasticUtils v0.6 and later, `S` takes a `MappingType`. A
`MappingType` can be related to a model, but it itself should not be
a model. This allows us to return search results as a list of
`MappingType` instances which can do things rather than forcing you
to do a db hit to get back instances that can do things.
This is similar to how django-haystack works with the SearchIndex
class, except ElasticUtils doesn't yet support declarative mapping
definition.
See documentation for more details.
* **By default, results are now DefaultMappingType.**
In ElasticUtils v0.4 and v0.5, if the `S` was untyped and you didn't
specify either ``values_dict`` or ``values_list``, then the results
would come back as a list of dicts.
In ElasticUtils v0.5, if the `S` is untyped and you didn't specify
either ``values_dict`` or ``values_list``, then the results would
come back as a list of `DefaultMappingType`.
See documentation for more details.
* **elasticutils.contrib.django.models.SearchMixin is no more.**
The `SearchMixin` class is replaced by `DjangoMappingType` which
relates ElasticSearch mapping types to Django ORM models and
`Indexable` which is a mixin that adds a bunch of index-related
infrastructure.
**Changes:**
* Added ``_source`` and ``_id`` to the metadata decorated on the
search results.
See documentation for more details.
* Fixed ``elasticutils.contrib.django.es_required_or_50x``.
It works better now.
Version 0.5: Released September 4th, 2012
=========================================
**API-breaking changes:**
None.
**Changes:**
* Added ``demote`` transform: it adds boosting query support allowing
you to do a negative query which reduces scores for documents that
match.
* The elasticutils version is now available in ``elasticutils.__version__``
as well as ``elasticutils._version.__version__``.
* Added ``__in`` support for queries. Doing::
S().query(foo__in=['a', 'b', 'c'])
does a terms query now.
* Added `MLT` class which does morelikethis.
* Added API documentation for S, an index, ``order_by`` docs, fixed some
icky bugs, and generally improved everything at least a little bit.
Version 0.4: Released July 31st, 2012
=====================================
**API-breaking changes:**
* **ElasticUtils no longer requires Django.**
If you're using Django, you should change your import statements
from things like::
from elasticutils import get_es, S, F
to::
from elasticutils.contrib.django import get_es, S, F
Further, Django helper modules like ``cron``, ``tasks``, and
``models`` were all moved to ``elasticutils.contrib.django``.
We moved `ESTestCase` from ``elasticutils.tests`` to
``elasticutils.contrib.django.estestcase``
If you don't use Django, ElasticUtils is easier to use!
* **S no longer requires a type.**
If you're not using Django, `S` no longer requires a type. If you
don't specify a type, then ElasticUtils will return results as
dicts.
* **Values and values_list changed.**
``values()`` was renamed to ``values_list()``.
``values_list()`` (was ``values()``) now always returns a list of
tuples even if you only requested a single field. Previously, doing
something like::
searcher = S().values_list('id')
would return something like::
[1, 2, 3, 4, 5]
Now it returns::
[(1,), (2,), (3,), (4,), (5,)]
* **Facet functionality was rewritten.**
Changed ``.facet()`` to be arg-driven and allow for `filtered` and
`global_` flags.
Changed ``.facets()`` to ``.facet_counts()`` to match Django
Haystack.
Added ``.facet_raw()`` which allows you to do more complicated
facets including scripting. This is similar to the original
``.facet()`` implementation.
**Changes:**
* Overhauled and cleaned up ElasticUtils tests. Running tests can be done
with::
DJANGO_SETTINGS_MODULE=es_settings nosetests
* Default timeout was changed from 1 second to 5 seconds.
* Added ``es`` transform: it allows you to specify the settings with which
to create an ES when the search is executed.
* Added ``es_builder`` transform: it allows you to specify a function
that builds an ES which will be executed to create an ES when the
search is executed.
* Added ``indexes`` transform: it allows you to specify the indexes to
use for the search.
* Added ``doctypes`` transform: it allows you to specify the doctypes
to use for the search.
* Added ``explain`` transform: it allows you to set the "explain" flag
which gives you an explanation of how the score was calculated.
I also added ``elasticutils.utils.format_elasticutils`` which formats
the resulting explanation text into something slightly more
readable. But it's likely this will change in the future.
* Added ``boost`` transform: it allows you to do query-time field
boosting.
* Added support for ``prefix``. It's the same as ``startswith``, but
it uses the same word that ElasticSearch uses. At some point, we'll
remove support for ``startswith``.
* Added support for ``text_phrase`` and ``query_string`` queries.
* Added ``highlight`` transform: generates highlighted fragments of
content that matched the query.
* Removed requirement for nuggets.
* Continued to improve documentation.
Version 0.3: Released June 1st, 2012
====================================
**Changes:**
* Add documentation for debugging, project details and other things.
* Minor project cleanup to make it easier to maintain and use
* Make ``get_es()`` more useful. It now takes overrides that allow you to
configure multiple kinds of ES objects for different purposes.