go-ego / riot

Go Open Source, Distributed, Simple and efficient Search Engine; Warning: This is V1 and beta version, because of big memory consume, and the V2 will be rewrite all code.
Apache License 2.0
6.11k stars 473 forks source link

The persistent storage data restart project disappears #74

Closed qweawdqq closed 5 years ago

qweawdqq commented 5 years ago

The persistent storage data restart project disappears

qweawdqq commented 5 years ago

刚添加完的索引是能够查询到的,但是重启工程之后,就查询不到之前添加的索引了

vcaesar commented 5 years ago

Please provide the code.

qweawdqq commented 5 years ago
//标题、作者、标签
func AddContent(title,content,author string,labels[]string)(err error)  {
    //defer searcher.Close()
    //错误
    log.Println("添加了文件标题为: ", title)

    //err = GetError()
    //为文件添加属性
    attri :=types.Attri{title,author,unit.GetTimeNow(),0}
    ct :=types.DocData{Content: content}
    ct.Attri=attri
    //如果类别不为空则添加类别
    if labels != nil || len(labels) >0{
        ct.Labels = labels
    }
    //生成主键
    docid := uint64(time.Now().Unix())
    //插入
    searcher.Index(docid, ct)
    //searcher.Index(22, types.DocData{Content: content})
    //刷新
    searcher.Flush()
    log.Println("创建的索引数量: ", searcher.NumDocsIndexed())

    return err
}
qweawdqq commented 5 years ago

我是使用了一个web框架(beego),请求过来之后在进行添加搜索文档的

qweawdqq commented 5 years ago

Take a look at the code I duplicated.Adding is good, but as long as the service is restarted, there is no data added before.

qweawdqq commented 5 years ago

I used a web framework (beego) After the request comes in, the search document is added. The files added before restarting the service disappeared

vcaesar commented 5 years ago

Please restore index first, then try gob registration,

gob.Register(MyAttriStruct{})
qweawdqq commented 5 years ago

Thank you very much. The problem has been solved.

zlykernel commented 5 years ago

Thank you very much. The problem has been solved. 能提供一下 解决的代码吗

zlykernel commented 5 years ago

我也遇到同样问题,go version go1.12.4 linux/amd64 代码如下: package main

import ( "log" "net/http" "time"

// rhttp "github.com/go-ego/riot/net/http"

"github.com/go-ego/riot"
"github.com/go-ego/riot/types"

)

var ( // searcher is coroutine safe searcher = riot.Engine{}

opts = types.EngineOpts{
    Using: 1,
    IndexerOpts: &types.IndexerOpts{
        IndexType: types.DocIdsIndex,
    },
    UseStore: true,
    StoreFolder: "riot-index-data",
    StoreEngine: "bg", // bg: badger, lbd: leveldb, bolt: bolt
}

)

//标题、作者、标签 func AddContent(title,content,author string,labels[]string)(err error) { //defer searcher.Close() //错误 log.Println("添加了文件标题为: ", title)

//err = GetError()
//为文件添加属性
attri :=types.Attri{title,author,time.Now().Format("2006-01-02 15:04:05"),0}
ct :=types.DocData{Content: content}
ct.Attri=attri
//如果类别不为空则添加类别
if labels != nil || len(labels) >0{
    ct.Labels = labels
}
//生成主键
docid := time.Now().Format("2006-01-02 15:04:05")
//插入
searcher.Index(docid, ct)
//刷新
searcher.Flush()
log.Println("创建的索引数量: ", searcher.NumDocsIndexed())
return err

}

func Add(w http.ResponseWriter, req *http.Request){ AddContent("title1","content1","author1",[]string{"false"}) log.Println("after Add 创建的索引数量: ", searcher.NumDocsIndexed()) // restoreIndex() }

func restoreIndex() { searcher.Init(opts) defer searcher.Close() searcher.Flush() log.Println("recover index number: ", searcher.NumDocsIndexed()) }

func main() {

searcher.Init(opts)
// restoreIndex()
log.Println("创建的索引数量: ", searcher.NumDocsIndexed())
// http.HandleFunc("/search", rhttp.Search)
// http.HandleFunc("/dist", rhttp.WgDist)
// http.HandleFunc("/Add", Add)
// log.Println("listen and serve on 8080...")
// log.Fatal(http.ListenAndServe(":8088", nil))

// Add(nil,nil)
// searcher.Flush()

sea := searcher.Search(types.SearchReq{
    Text: "content1",
    RankOpts: &types.RankOpts{
        OutputOffset: 0,
        MaxOutputs:   100,
    }})
log.Println("查询: ", sea)

defer searcher.Close()

}