////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////

=== Full Text Search
Using MongoDB 2.6 and above you can create https://docs.mongodb.org/manual/reference/operator/query/text/#op._S_text[full text search] indices.

To create a "text" index using the `index` method inside the `mapping` block:

[source,groovy]
----
class Product {
    ObjectId id
    String title

    static mapping = {
        index title:"text"
    }
}
----

You can then search for instances using the `search` method:

[source,groovy]
----
assert Product.search("bake coffee cake").size() == 10
assert Product.search("bake coffee -cake").size() == 6
----

You can search for the top results by rank using the `searchTop` method:

[source,groovy]
----
assert Product.searchTop("cake").size() == 4
assert Product.searchTop("cake",3).size() == 3
----

And count the number of hits with the `countHits` method:

[source,groovy]
----
assert Product.countHits('coffee') == 5
----