You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/03/19 01:22:33 UTC

[6/9] lucy git commit: Add Go port of sample app.

Add Go port of sample app.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/8ebde77b
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/8ebde77b
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/8ebde77b

Branch: refs/heads/master
Commit: 8ebde77b488a1e06689cf5fbbe556a11034ed9f6
Parents: 209e3f9
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Nov 17 09:30:49 2014 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sun Mar 15 18:48:11 2015 -0700

----------------------------------------------------------------------
 go/sample/getting_started.go | 127 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 127 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/8ebde77b/go/sample/getting_started.go
----------------------------------------------------------------------
diff --git a/go/sample/getting_started.go b/go/sample/getting_started.go
new file mode 100644
index 0000000..fb69b74
--- /dev/null
+++ b/go/sample/getting_started.go
@@ -0,0 +1,127 @@
+/* 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()
+}