Introduction
------------

This package provides a complete user interface for ``AdvancedQuery`` by
Dieter Maurer. It enables you to use a powerful language to search for
content. It also provides functionality to save parametrized and conditional
queries for later use (predefined queries). Look at the examples for more information.

Installation
------------

- Put anthill.querytool in eggs= and zcml=
- Make sure that AdvancedQuery is installed (works for Plone 3.x)

Example query
-------------

 A query could look like that::

    And(
        Eq('SearchableText', '$text'),
        ~Generic('path', {'query':'Members', 'level':-1}),

        [[if($allowed_types)]]
            In('portal_types', $allowed_types),
        [[endif]]

        [[ifnot($allowed_types)]]
            In('portal_types', ['Folder', 'Document']),
        [[endif]]

        Ge('start_date', TODAY)
    )

Here you see that you can parametrize queries (variable expansion enabled
using $), you also can use defined constants (only one currently active called TODAY
where TODAY=DateTime()) and you can put conditionals in your queries.

Conditionals are a powerful way to enable or disable certain parts of your
query. The ``if`` statement checks if a given parameter exists. You can also
replace ``if`` with ``ifnot`` that only activates the given part if the
parameter is not set.

You can save this query and call it later on like that::

   context.query_tool.executePredefinedQuery('contentsearch', text='Test*', allowed_types=['Folder', ])

Extensions
----------

This release adds some additional query operators (defined in
SearchOperators.py). The following operators are currently available:

- ``Count`` counts items in search results. (e.g. Count(Eq('SearchableText', 'moses')) ) 
- ``Sum`` computes sum over int result (e.g. Sum(Ge('commentcount', 10)) )
- ``Avg`` computes the average over an int result (e.g. Avg(Ge('userviews', 1)) )

Look at SearchOperators.py for examples on how to create your own operators.

Submit query
------------

.. image:: http://files.banality.de/public/anthill.querytool.submit.jpg

Predefined queries
------------------

.. image:: http://files.banality.de/public/anthill.querytool.predefined.jpg

Thanks
------

- Dieter Maurer for his great implementation of AdvancedQuery
- Markus Reinsch for providing useful hints and code
