GoLucene 的简单使用
下载lucene的go版本,应该是支持到lucene4.9版本的 在go的安装目录下打开git的命令窗口输入
go get -u github.com/balzaczyy/golucene
下载完成后就可以使用了
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"
"github.com/balzaczyy/golucene/core/util"
"os"
"log"
"strings"
"github.com/balzaczyy/golucene/core/analysis/tokenattributes"
)
func main() {
util.SetDefaultInfoStream(util.NewPrintStreamInfoStream(os.Stdout))
index.DefaultSimilarity = func() index.Similarity {
return search.NewDefaultSimilarity()//评分器
}
生成索引 :
directory, _ := store.OpenFSDirectory("D://test_index")//创建索引的目录
analyzer := std.NewStandardAnalyzer()//使用标准分词器,貌似只有这一个分词器其他的没见到
conf := index.NewIndexWriterConfig(util.VERSION_LATEST, analyzer)//Indexwriter的配置器
writer, _ := index.NewIndexWriter(directory, conf)//index writer
d := document.NewDocument() //创建doucument
d.Add(document.NewTextFieldFromString("text", "今天下雨了", document.STORE_YES))//添加域信息
writer.AddDocument(d.Fields())
defer writer.Close() // ensure index is written //关闭writer
搜索:
reader, _ := index.OpenDirectoryReader(directory)//打开reader
searcher := search.NewIndexSearcher(reader)//创建searcher
q := search.NewTermQuery(index.NewTerm("text", "雨"))//termquery 目前只发现有termquery 和 boolean Query 其他的span profix phrase 这些应该是没有 因为用的term所以是产于分词的分词器是单字切分,所以只用一个雨字来搜索
res, _ := searcher.Search(q, nil, 1000)//result search 中传入query filter 和返回的条数
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("text -> %v\n", doc.Get("text"))
}
}
lucene 的go版本功能没有java版的全,只提供基础的搜索,可能是开源出来的东西太少了

浙公网安备 33010602011771号