Closed qiukeren closed 5 years ago
不正常
发自我的 iPhone
在 2017年4月10日,03:09,仇柯人 notifications@github.com 写道:
第一次索引完毕,吓一跳。
1.6 GiB [##########] /tmp
72.1 MiB [ ] /bleve bleve目录为网页目录,tmp目录为索引目录
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.
虽然不太礼貌,不过既然是不正常了,那么求看一下,gojieba库,我的调用方法是不是有问题:
我换了个源,改成小说,来源是:http://www.iplaysoft.com/1326-txt-science-fiction.html
,
(源文件是cp936编码,手动转码成utf8)
大约1300个文件,43M。
索引完后的文件大约在900M
899.3 MiB [##########] /gojieba.bleve
43.3 MiB [ ] /source
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"github.com/blevesearch/bleve"
. "github.com/qiukeren/go-utils/common"
"github.com/yanyiwu/gojieba"
_ "github.com/yanyiwu/gojieba/bleve"
)
func Example() {
INDEX_DIR := "gojieba.bleve"
dirEntries, err := ioutil.ReadDir("/Users/XXX/gopath/src/search/bleve/source")
if err != nil {
log.Panicln(err)
}
type Message struct {
Id string
Content string
}
indexMapping := bleve.NewIndexMapping()
os.RemoveAll(INDEX_DIR)
// clean index when example finished
// defer os.RemoveAll(INDEX_DIR)
err = indexMapping.AddCustomTokenizer("gojieba",
map[string]interface{}{
"dictpath": gojieba.DICT_PATH,
"hmmpath": gojieba.HMM_PATH,
"userdictpath": gojieba.USER_DICT_PATH,
"type": "gojieba",
"idf": gojieba.IDF_PATH, //idf 与stop_words必须要加,不然报错,此处采用自带的idf
"stop_words": gojieba.STOP_WORDS_PATH,
},
)
if err != nil {
panic(err)
}
err = indexMapping.AddCustomAnalyzer("gojieba",
map[string]interface{}{
"type": "gojieba",
"tokenizer": "gojieba",
},
)
if err != nil {
panic(err)
}
indexMapping.DefaultAnalyzer = "gojieba"
index, err := bleve.New(INDEX_DIR, indexMapping)
if err != nil {
panic(err)
}
log.Println(len(dirEntries))
for k, v := range dirEntries {
log.Println(k, "of", len(dirEntries))
data, _ := ReadToString("/Users/XXX/gopath/src/search/bleve/source/" + v.Name())
message := Message{Id: v.Name(), Content: string(data)}
// go func(name string, content Message) {
index.Index(v.Name(), message)
// }(v.Name(), message)
}
querys := []string{
"你好世界",
"亲口交代",
}
for _, q := range querys {
req := bleve.NewSearchRequest(bleve.NewQueryStringQuery(q))
req.Highlight = bleve.NewHighlight()
res, err := index.Search(req)
if err != nil {
panic(err)
}
fmt.Println(res)
}
}
func main() {
Example()
}
sphinx挺好的
@wenduniang
我自己选型的规则是,Go>java>php>python>C/C++。
单单就搜索方面的选型是,Go>java>python>c/c++/php。
java尚且还有elk、lucene等一系列框架可以选,我没必要再舍近求远了。
解决了吗
并没有
第一次索引完毕,吓一跳。
bleve目录为网页目录,tmp目录为索引目录