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版的全,只提供基础的搜索,可能是开源出来的东西太少了

 

posted @ 2017-10-18 15:22  王南辉  阅读(1332)  评论(0编辑  收藏  举报