==========================
What's new in ElasticUtils
==========================


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.
