[![GoDoc](https://godoc.org/github.com/bcampbell/qs?status.svg)](https://godoc.org/github.com/bcampbell/qs)

## Overview

qs implements a query language for the [Bleve](http://www.blevesearch.com/)
text indexer library.

The query syntax is aiming to be about the same as those used by
[Lucene](http://lucene.apache.org/core/5_3_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description)
and [Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax).

The full syntax is described in [syntax.md](syntax.md).

## Usage

    import "github.com/bcampbell/qs"

    query, err := qs.Parse("grapefruit lemon orange lime")

Or, to create a parse which uses AND as the default operator:

    p := qs.Parser{DefaultOp: qs.AND}
	query,err := p.Parse("grapefruit lemon orange lime")



## Quick Examples

Documents containing the term `grapefruit`:

    grapefruit

There is support for boolean AND, OR and NOT:

    grapefruit OR lemon
    grapefruit AND lemon
    grapefruit AND NOT lemon

Phrases are indicated with quotes:

    "navel orange"

The default boolean operator is OR, so these two are equivalent when using the default parser:

    grapefruit lemon
    grapefruit OR lemon


Fields:

    tags:citrus
    headline:"How to Make the Perfect Negroni"

Grouping:

    (lemon AND lime) OR (orange AND grapefruit)

Boosting term relevance:

    fruit grapefruit^2

Inclusive ranges in square brackets, Exclusive ranges in curly brackets:

    date:[2012-01-01 TO 2012-12-31]
    count:{0 TO 100}

Wildcard markers `*` (any character sequence, 0 or more) and `?` (any single character)
eg to match `foot`, `fort`, `fret` etc:

    f??t

eg to match `ant`, `anteater`, `antidisestablishmentarianism` etc:

    ant*



