blob: a817b6329bfeeaa141098ba9d35dca608054eff8 [file] [log] [blame]
/* 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
*
* 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.
*/
/*
* Sample program to get started with the Go bindings for the Apache Lucy C
* library.
*
* Creates an index with a few documents and conducts a few searches.
*/
package main
import "git-wip-us.apache.org/repos/asf/lucy.git/go/lucy"
import "fmt"
import "log"
func main() {
schema := createSchema()
index := "lucydemo"
indexDocuments(schema, index)
searcher, err := lucy.OpenIndexSearcher(index)
if err != nil {
log.Fatal(err)
}
defer searcher.Close()
performSearch(searcher, "ullamco")
performSearch(searcher, "ut OR laborum")
performSearch(searcher, `"fugiat nulla"`)
}
func createSchema() lucy.Schema {
// Create a new schema.
schema := lucy.NewSchema()
// Create an analyzer.
analyzer := lucy.NewEasyAnalyzer("en")
// Specify fields.
fieldType := lucy.NewFullTextType(analyzer)
schema.SpecField("title", fieldType)
schema.SpecField("content", fieldType)
return schema
}
type MyDoc struct {
Title string
Content string
}
var docs []MyDoc = []MyDoc{
MyDoc{
Title: `lorem ipsum`,
Content: `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.`,
},
MyDoc{
Title: `Ut enim`,
Content: `Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.`,
},
MyDoc{
Title: `Duis aute`,
Content: `Duis aute irure dolor in reprehenderit in voluptate velit essei
cillum dolore eu fugiat nulla pariatur.`,
},
MyDoc{
Title: `Excepteur sint`,
Content: `Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.`,
},
}
func indexDocuments(schema lucy.Schema, index string) {
indexerArgs := &lucy.OpenIndexerArgs{
Schema: schema,
Index: index,
Create: true,
Truncate: true,
}
indexer, err := lucy.OpenIndexer(indexerArgs)
if err != nil {
log.Fatal(err)
}
defer indexer.Close()
for _, doc := range docs {
err := indexer.AddDoc(&doc)
if err != nil {
log.Fatal(err)
}
}
err = indexer.Commit()
if err != nil {
log.Fatal(err)
}
}
func performSearch(searcher lucy.Searcher, query string) {
fmt.Println("Searching for:", query)
hits, err := searcher.Hits(query, 0, 10, nil)
if err != nil {
log.Fatal(err)
}
var hit MyDoc
for hits.Next(&hit) {
fmt.Printf(" Result: %s\n", hit.Title)
}
if err := hits.Error(); err != nil {
log.Fatal(err)
}
fmt.Println()
}