-
Notifications
You must be signed in to change notification settings - Fork 303
/
example3.go
99 lines (85 loc) · 2.01 KB
/
example3.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"time"
"github.com/huichen/wukong/engine"
"github.com/huichen/wukong/types"
)
var (
searcher = engine.Engine{}
docId uint64
)
func main() {
searcher.Init(types.EngineInitOptions{
IndexerInitOptions: &types.IndexerInitOptions{
IndexType: types.DocIdsIndex,
},
UsePersistentStorage: true,
PersistentStorageFolder: "./index",
PersistentStorageShards: 8,
SegmenterDictionaries: "./dict/dictionary.txt",
StopTokenFile: "./dict/stop_tokens.txt",
})
defer searcher.Close()
searcher.FlushIndex()
log.Println("recover index number:", searcher.NumDocumentsIndexed())
docId = searcher.NumDocumentsIndexed()
os.MkdirAll("./source", 0777)
go func() {
for {
var paths []string
//update index dynamically
time.Sleep(time.Second * 10)
var path = "./source"
err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
if f == nil {
return err
}
if f.IsDir() {
return nil
}
fc, err := ioutil.ReadFile(path)
if err != nil {
fmt.Println("read file:", path, "error:", err)
}
docId++
fmt.Println("indexing file:", path, "... ...")
searcher.IndexDocument(docId, types.DocumentIndexData{Content: string(fc)}, true)
fmt.Println("indexed file:", path, " ok")
paths = append(paths, path)
return nil
})
if err != nil {
fmt.Printf("filepath.Walk() returned %v\n", err)
return
}
for _, p := range paths {
err := os.Remove(p)
if err != nil {
fmt.Println("remove file:", p, " error:", err)
continue
}
fmt.Println("remove file:", p, " ok!")
}
if len(paths) != 0 {
// 等待索引刷新完毕
fmt.Println("flush index....")
searcher.FlushIndex()
fmt.Println("flush index ok")
}
}
}()
for {
var s string
fmt.Println("Please input your search keywords:")
fmt.Scanf("%s", &s)
if s == "exit" {
break
}
fmt.Printf("%#v\n", searcher.Search(types.SearchRequest{Text: s}))
}
}