Skip to content

Commit

Permalink
fix #6
Browse files Browse the repository at this point in the history
  • Loading branch information
ironsweet committed Dec 25, 2014
1 parent bdc1fac commit e0961f5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 72 deletions.
47 changes: 10 additions & 37 deletions README.md
Expand Up @@ -38,43 +38,16 @@ Installation
Usage
-----

import (
"fmt"
std "github.com/balzaczyy/golucene/analysis/standard"
_ "github.com/balzaczyy/golucene/core/codec/lucene410"
"github.com/balzaczyy/golucene/core/document"
"github.com/balzaczyy/golucene/core/index"
"github.com/balzaczyy/golucene/core/search"
"github.com/balzaczyy/golucene/core/store"
"github.com/balzaczyy/golucene/core/util"
)

util.SetDefaultInfoStream(util.NewPrintStreamInfoStream(os.Stdout))
index.DefaultSimilarity = func() index.Similarity {
return search.NewDefaultSimilarity()
}

...

directory, _ := store.OpenFSDirectory("app/index")
analyzer := std.NewStandardAnalyzer()
conf := index.NewIndexWriterConfig(util.VERSION_LATEST, analyzer)
writer, _ := index.NewIndexWriter(directory, conf)

d := document.NewDocument()
d.Add(document.NewTextFieldFromString("foo", "bar", document.STORE_YES))
writer.AddDocument(d.Fields())
writer.Close() // ensure index is written

reader, _ := index.OpenDirectoryReader(directory)
searcher := search.NewIndexSearcher(reader)

q := search.NewTermQuery(index.NewTerm("foo", "bar"))
res, _ := searcher.Search(q, nil, 1000)
fmt.Printf("Found %v hits.\n", res.TotalHits)
for _, hit := range res.ScoreDocs {
fmt.Printf("Doc %v score: %v\n", hit.Doc, hit.Score)
}
Using GoLucene is similar to using Lucene Java. Firstly, index need
to be built first. Then, create an query and do the search against
the index.

Note that the current GoLucene is rather basic and limited in feature.
Only default functions are supported, like term frequency based
weight calculation, filesystem directory, boolean query, etc. For
further features, please raise requests.

A detailed example can be found [here](gl.go).

License
-------
Expand Down
64 changes: 29 additions & 35 deletions gl.go
Expand Up @@ -2,48 +2,42 @@ package main

import (
"fmt"
std "github.com/balzaczyy/golucene/analysis/standard"
_ "github.com/balzaczyy/golucene/core/codec/lucene410"
"github.com/balzaczyy/golucene/core/document"
"github.com/balzaczyy/golucene/core/index"
"github.com/balzaczyy/golucene/core/search"
"github.com/balzaczyy/golucene/core/store"
"log"
"github.com/balzaczyy/golucene/core/util"
"os"
)

func main() {
log.Print("Oepning FSDirectory...")
path := "core/search/testdata/win8/belfrysample"
d, err := store.OpenFSDirectory(path)
if err != nil {
panic(err)
util.SetDefaultInfoStream(util.NewPrintStreamInfoStream(os.Stdout))
index.DefaultSimilarity = func() index.Similarity {
return search.NewDefaultSimilarity()
}
log.Print("Opening DirectoryReader...")
r, err := index.OpenDirectoryReader(d)
if err != nil {
panic(err)
}
if r == nil {
panic("DirectoryReader cannot be opened.")
}
if len(r.Leaves()) < 1 {
panic("Should have one leaf.")
}
for _, ctx := range r.Leaves() {
if ctx.Parent() != r.Context() {
fmt.Println("DEBUG", ctx.Parent(), r.Context())
panic("leaves not point to parent!")
}
}
log.Print("Initializing IndexSearcher...")
ss := search.NewIndexSearcher(r)
log.Print("Searching...")
docs, err := ss.SearchTop(search.NewTermQuery(index.NewTerm("content", "bat")), 10)
if err != nil {
panic(err)
}
log.Println("Hits:", docs.TotalHits)
doc, err := r.Document(docs.ScoreDocs[0].Doc)
if err != nil {
panic(err)

directory, _ := store.OpenFSDirectory("test_index")
analyzer := std.NewStandardAnalyzer()
conf := index.NewIndexWriterConfig(util.VERSION_LATEST, analyzer)
writer, _ := index.NewIndexWriter(directory, conf)

d := document.NewDocument()
d.Add(document.NewTextFieldFromString("foo", "bar", document.STORE_YES))
writer.AddDocument(d.Fields())
writer.Close() // ensure index is written

reader, _ := index.OpenDirectoryReader(directory)
searcher := search.NewIndexSearcher(reader)

q := search.NewTermQuery(index.NewTerm("foo", "bar"))
res, _ := searcher.Search(q, nil, 1000)
fmt.Printf("Found %v hit(s).\n", res.TotalHits)
for _, hit := range res.ScoreDocs {
fmt.Printf("Doc %v score: %v\n", hit.Doc, hit.Score)
doc, _ := reader.Document(hit.Doc)
fmt.Printf("foo -> %v\n", doc.Get("foo"))
}
log.Println("Hit 1's title: ", doc.Get("title"))

}

0 comments on commit e0961f5

Please sign in to comment.