.. _es-guide-reference-query-dsl-index: .. _es-guide-reference-query-dsl: ========= Query Dsl ========= *elasticsearch* provides a full query dsl based on JSON to define queries. In general, there are basic queries such as :ref:`term ` or :ref:`prefix `. There are also compound queries like the :ref:`bool ` query. Queries can also have filters associated with them such as the :ref:`filtered ` or :ref:`constant_score ` queries, with specific filter queries. Think of the Query DSL as an AST of queries. Certain queries can contain other queries (like the :ref:`bool ` query), other can contain filters (like the :ref:`constant_score `, and some can contain both a query and a filter (like the :ref:`filtered `. Each of those can container *any* query of the list of queries or *any* filter from the list of filters, resulting in the ability to build quite complex (and interesting) queries. Both queries and filters can be used in different APIs. For example, within a :ref:`search query `, or as a :ref:`facet filter `. This section explains the components (queries and filters) that can form the AST one can use. Note Filters are very handy since they perform an order of magnitude better then plain queries since no scoring is required and they are automatically cached. Filters and Caching =================== Filters can be a great candidate for caching. Caching the result of a filter does not require a lot of memory, and will cause other queries executing against the same filter (same parameters) to be blazingly fast. Some filters already produce a result that is easily cacheable, and the difference between caching and not caching them is the act of placing the result in the cache or not. These filters, which include the :ref:`term `, :ref:`terms `, :ref:`prefix `, and :ref:`range ` filters, are by default cached and are recommended to use (compared to the equivalent query version) when the same filter (same parameters) will be used across multiple different queries (for example, a range filter with age higher than 10). Other filters, usually already working with the field data loaded into memory, are not cached by default. Those filter are already very fast, and the process of caching them requires extra processing in order to allow the filter result to be used with different queries than the one executed. This filters, including the geo filters, :ref:`numeric_range `, and :ref:`script ` are not cached by default. The last type of filters are filters that work with other filters. The :ref:`and `, :ref:`not `, and :ref:`or ` are not cached as they basically just manipulate the internal filters. Query: .. toctree:: :maxdepth: 1 bool-query boosting-query constant-score-query custom-score-query dis-max-query field-query filtered-query flt-field-query flt-query fuzzy-query has-child-query ids-query match-all-query mlt-field-query mlt-query prefix-query query-string-query range-query span-first-query span-near-query span-not-query span-or-query span-term-query term-query terms-query text-query top-children-query wildcard-query Filter: .. toctree:: :maxdepth: 1 and-filter bool-filter exists-filter geo-bounding-box-filter geo-distance-filter geo-distance-range-filter geo-polygon-filter has-child-filter ids-filter limit-filter match-all-filter missing-filter not-filter numeric-range-filter or-filter prefix-filter query-filter range-filter script-filter term-filter terms-filter type-filter