2015-01-02 14:09:29 +01:00
|
|
|
|
// Copyright (c) 2014 Couchbase, Inc.
|
2016-10-02 16:13:14 +02:00
|
|
|
|
//
|
|
|
|
|
// Licensed 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
|
|
|
|
|
//
|
|
|
|
|
// http://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.
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
|
|
|
|
package bleve
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
"testing"
|
2015-01-03 18:05:45 +01:00
|
|
|
|
"time"
|
2015-09-16 23:10:59 +02:00
|
|
|
|
|
2016-09-18 15:33:18 +02:00
|
|
|
|
"github.com/blevesearch/bleve/mapping"
|
2016-08-18 22:03:48 +02:00
|
|
|
|
"github.com/blevesearch/bleve/search"
|
2016-10-01 23:20:59 +02:00
|
|
|
|
"github.com/blevesearch/bleve/search/highlight/highlighter/ansi"
|
2015-01-02 14:09:29 +01:00
|
|
|
|
)
|
|
|
|
|
|
2016-09-18 15:33:18 +02:00
|
|
|
|
var indexMapping mapping.IndexMapping
|
2016-10-02 18:00:01 +02:00
|
|
|
|
var exampleIndex Index
|
2015-01-05 08:37:13 +01:00
|
|
|
|
var err error
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
2015-01-05 08:37:13 +01:00
|
|
|
|
err = os.RemoveAll("path_to_index")
|
2015-01-02 14:09:29 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
toRun := m.Run()
|
2016-10-02 18:00:01 +02:00
|
|
|
|
if exampleIndex != nil {
|
|
|
|
|
err = exampleIndex.Close()
|
2016-02-09 19:33:11 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-04-07 20:52:00 +02:00
|
|
|
|
err = os.RemoveAll("path_to_index")
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2015-01-02 14:09:29 +01:00
|
|
|
|
os.Exit(toRun)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNew() {
|
2016-09-18 15:33:18 +02:00
|
|
|
|
indexMapping = NewIndexMapping()
|
2016-10-02 18:00:01 +02:00
|
|
|
|
exampleIndex, err = New("path_to_index", indexMapping)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2016-10-02 18:00:01 +02:00
|
|
|
|
count, err := exampleIndex.DocCount()
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(count)
|
|
|
|
|
// Output:
|
|
|
|
|
// 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleIndex_indexing() {
|
2015-01-03 18:05:45 +01:00
|
|
|
|
data := struct {
|
|
|
|
|
Name string
|
|
|
|
|
Created time.Time
|
2016-08-18 22:03:48 +02:00
|
|
|
|
Age int
|
|
|
|
|
}{Name: "named one", Created: time.Now(), Age: 50}
|
2015-01-03 18:05:45 +01:00
|
|
|
|
data2 := struct {
|
|
|
|
|
Name string
|
|
|
|
|
Created time.Time
|
2016-08-18 22:03:48 +02:00
|
|
|
|
Age int
|
|
|
|
|
}{Name: "great nameless one", Created: time.Now(), Age: 25}
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
|
|
|
|
// index some data
|
2016-10-02 18:00:01 +02:00
|
|
|
|
err = exampleIndex.Index("document id 1", data)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2016-10-02 18:00:01 +02:00
|
|
|
|
err = exampleIndex.Index("document id 2", data2)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// 2 documents have been indexed
|
2016-10-02 18:00:01 +02:00
|
|
|
|
count, err := exampleIndex.DocCount()
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(count)
|
|
|
|
|
// Output:
|
|
|
|
|
// 2
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-07 14:13:09 +01:00
|
|
|
|
// Examples for query related functions
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
func ExampleNewMatchQuery() {
|
|
|
|
|
// finds documents with fields fully matching the given query text
|
|
|
|
|
query := NewMatchQuery("named one")
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewMatchAllQuery() {
|
|
|
|
|
// finds all documents in the index
|
|
|
|
|
query := NewMatchAllQuery()
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(len(searchResults.Hits))
|
|
|
|
|
// Output:
|
|
|
|
|
// 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewMatchNoneQuery() {
|
|
|
|
|
// matches no documents in the index
|
|
|
|
|
query := NewMatchNoneQuery()
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(len(searchResults.Hits))
|
|
|
|
|
// Output:
|
|
|
|
|
// 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewMatchPhraseQuery() {
|
|
|
|
|
// finds all documents with the given phrase in the index
|
|
|
|
|
query := NewMatchPhraseQuery("nameless one")
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewNumericRangeQuery() {
|
|
|
|
|
value1 := float64(11)
|
|
|
|
|
value2 := float64(100)
|
2015-01-03 18:05:45 +01:00
|
|
|
|
data := struct{ Priority float64 }{Priority: float64(15)}
|
|
|
|
|
data2 := struct{ Priority float64 }{Priority: float64(10)}
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
2016-10-02 18:00:01 +02:00
|
|
|
|
err = exampleIndex.Index("document id 3", data)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2016-10-02 18:00:01 +02:00
|
|
|
|
err = exampleIndex.Index("document id 4", data2)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2015-01-02 14:09:29 +01:00
|
|
|
|
|
|
|
|
|
query := NewNumericRangeQuery(&value1, &value2)
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewNumericRangeInclusiveQuery() {
|
|
|
|
|
value1 := float64(10)
|
|
|
|
|
value2 := float64(100)
|
|
|
|
|
v1incl := false
|
|
|
|
|
v2incl := false
|
|
|
|
|
|
|
|
|
|
query := NewNumericRangeInclusiveQuery(&value1, &value2, &v1incl, &v2incl)
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewPhraseQuery() {
|
|
|
|
|
// finds all documents with the given phrases in the given field in the index
|
|
|
|
|
query := NewPhraseQuery([]string{"nameless", "one"}, "Name")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewPrefixQuery() {
|
|
|
|
|
// finds all documents with terms having the given prefix in the index
|
|
|
|
|
query := NewPrefixQuery("name")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 14:09:29 +01:00
|
|
|
|
fmt.Println(len(searchResults.Hits))
|
|
|
|
|
// Output:
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewQueryStringQuery() {
|
|
|
|
|
query := NewQueryStringQuery("+one -great")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewTermQuery() {
|
|
|
|
|
query := NewTermQuery("great")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewFacetRequest() {
|
|
|
|
|
facet := NewFacetRequest("Name", 1)
|
|
|
|
|
query := NewMatchAllQuery()
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.AddFacet("facet name", facet)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// total number of terms
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Total)
|
|
|
|
|
// numer of docs with no value for this field
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Missing)
|
2015-10-09 10:54:40 +02:00
|
|
|
|
// term with highest occurrences in field name
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Terms[0].Term)
|
|
|
|
|
// Output:
|
|
|
|
|
// 5
|
|
|
|
|
// 2
|
|
|
|
|
// one
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleFacetRequest_AddDateTimeRange() {
|
|
|
|
|
facet := NewFacetRequest("Created", 1)
|
|
|
|
|
facet.AddDateTimeRange("range name", time.Unix(0, 0), time.Now())
|
|
|
|
|
query := NewMatchAllQuery()
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.AddFacet("facet name", facet)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// dates in field Created since starting of unix time till now
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].DateRanges[0].Count)
|
|
|
|
|
// Output:
|
|
|
|
|
// 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleFacetRequest_AddNumericRange() {
|
|
|
|
|
value1 := float64(11)
|
|
|
|
|
|
|
|
|
|
facet := NewFacetRequest("Priority", 1)
|
|
|
|
|
facet.AddNumericRange("range name", &value1, nil)
|
|
|
|
|
query := NewMatchAllQuery()
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.AddFacet("facet name", facet)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// number documents with field Priority in the given range
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].NumericRanges[0].Count)
|
|
|
|
|
// Output:
|
2015-01-02 14:09:29 +01:00
|
|
|
|
// 1
|
|
|
|
|
}
|
2015-01-03 18:05:45 +01:00
|
|
|
|
|
|
|
|
|
func ExampleNewHighlight() {
|
|
|
|
|
query := NewMatchQuery("nameless")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.Highlight = NewHighlight()
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].Fragments["Name"][0])
|
|
|
|
|
// Output:
|
2015-07-06 23:56:45 +02:00
|
|
|
|
// great <mark>nameless</mark> one
|
2015-01-03 18:05:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewHighlightWithStyle() {
|
|
|
|
|
query := NewMatchQuery("nameless")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2015-09-16 23:10:59 +02:00
|
|
|
|
searchRequest.Highlight = NewHighlightWithStyle(ansi.Name)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].Fragments["Name"][0])
|
|
|
|
|
// Output:
|
|
|
|
|
// great [43mnameless[0m one
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleSearchRequest_AddFacet() {
|
|
|
|
|
facet := NewFacetRequest("Name", 1)
|
|
|
|
|
query := NewMatchAllQuery()
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.AddFacet("facet name", facet)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
// total number of terms
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Total)
|
|
|
|
|
// numer of docs with no value for this field
|
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Missing)
|
2015-10-09 10:54:40 +02:00
|
|
|
|
// term with highest occurrences in field name
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Facets["facet name"].Terms[0].Term)
|
|
|
|
|
// Output:
|
|
|
|
|
// 5
|
|
|
|
|
// 2
|
|
|
|
|
// one
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewSearchRequest() {
|
|
|
|
|
// finds documents with fields fully matching the given query text
|
|
|
|
|
query := NewMatchQuery("named one")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewBooleanQuery() {
|
2016-09-20 03:12:36 +02:00
|
|
|
|
must := NewMatchQuery("one")
|
|
|
|
|
mustNot := NewMatchQuery("great")
|
|
|
|
|
query := NewBooleanQuery()
|
|
|
|
|
query.AddMust(must)
|
|
|
|
|
query.AddMustNot(mustNot)
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewConjunctionQuery() {
|
2016-09-20 03:12:36 +02:00
|
|
|
|
conjunct1 := NewMatchQuery("great")
|
|
|
|
|
conjunct2 := NewMatchQuery("one")
|
|
|
|
|
query := NewConjunctionQuery(conjunct1, conjunct2)
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleNewDisjunctionQuery() {
|
2016-09-20 03:12:36 +02:00
|
|
|
|
disjunct1 := NewMatchQuery("great")
|
|
|
|
|
disjunct2 := NewMatchQuery("named")
|
|
|
|
|
query := NewDisjunctionQuery(disjunct1, disjunct2)
|
2015-01-03 18:05:45 +01:00
|
|
|
|
searchRequest := NewSearchRequest(query)
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2015-01-05 08:37:13 +01:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-03 18:05:45 +01:00
|
|
|
|
fmt.Println(len(searchResults.Hits))
|
|
|
|
|
// Output:
|
|
|
|
|
// 2
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-18 22:03:48 +02:00
|
|
|
|
func ExampleSearchRequest_SortBy() {
|
|
|
|
|
// find docs containing "one", order by Age instead of score
|
|
|
|
|
query := NewMatchQuery("one")
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.SortBy([]string{"Age"})
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2016-08-18 22:03:48 +02:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
fmt.Println(searchResults.Hits[1].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 2
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ExampleSearchRequest_SortByCustom() {
|
|
|
|
|
// find all docs, order by Age, with docs missing Age field first
|
|
|
|
|
query := NewMatchAllQuery()
|
|
|
|
|
searchRequest := NewSearchRequest(query)
|
|
|
|
|
searchRequest.SortByCustom(search.SortOrder{
|
|
|
|
|
&search.SortField{
|
|
|
|
|
Field: "Age",
|
|
|
|
|
Missing: search.SortFieldMissingFirst,
|
|
|
|
|
},
|
|
|
|
|
})
|
2016-10-02 18:00:01 +02:00
|
|
|
|
searchResults, err := exampleIndex.Search(searchRequest)
|
2016-08-18 22:03:48 +02:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(searchResults.Hits[0].ID)
|
|
|
|
|
fmt.Println(searchResults.Hits[1].ID)
|
|
|
|
|
fmt.Println(searchResults.Hits[2].ID)
|
|
|
|
|
fmt.Println(searchResults.Hits[3].ID)
|
|
|
|
|
// Output:
|
|
|
|
|
// document id 3
|
|
|
|
|
// document id 4
|
|
|
|
|
// document id 2
|
|
|
|
|
// document id 1
|
|
|
|
|
}
|