parent
a2ad7634f2
commit
300ec79c96
|
@ -47,7 +47,7 @@ func (t TokenMap) LoadBytes(data []byte) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (t TokenMap) LoadLine(line string) error {
|
||||
func (t TokenMap) LoadLine(line string) {
|
||||
// find the start of a comment, if any
|
||||
startComment := strings.IndexAny(line, "#|")
|
||||
if startComment >= 0 {
|
||||
|
@ -58,7 +58,6 @@ func (t TokenMap) LoadLine(line string) error {
|
|||
for _, token := range tokens {
|
||||
t.AddToken(token)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t TokenMap) AddToken(token string) {
|
||||
|
|
15
config.go
15
config.go
|
@ -136,26 +136,35 @@ func init() {
|
|||
// build the default configuration
|
||||
Config = newConfiguration()
|
||||
|
||||
Config.Cache.DefineFragmentFormatter("highlightSpanHTML",
|
||||
_, err := Config.Cache.DefineFragmentFormatter("highlightSpanHTML",
|
||||
map[string]interface{}{
|
||||
"type": "html",
|
||||
"before": `<span class="highlight">`,
|
||||
"after": `</span>`,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
Config.Cache.DefineHighlighter("html",
|
||||
_, err = Config.Cache.DefineHighlighter("html",
|
||||
map[string]interface{}{
|
||||
"type": "simple",
|
||||
"fragmenter": "simple",
|
||||
"formatter": "highlightSpanHTML",
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
Config.Cache.DefineHighlighter("ansi",
|
||||
_, err = Config.Cache.DefineHighlighter("ansi",
|
||||
map[string]interface{}{
|
||||
"type": "simple",
|
||||
"fragmenter": "simple",
|
||||
"formatter": "ansi",
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// set the default highlighter
|
||||
Config.DefaultHighlighter = "html"
|
||||
|
|
|
@ -44,10 +44,14 @@ func (h *DeleteIndexHandler) ServeHTTP(w http.ResponseWriter, req *http.Request)
|
|||
}
|
||||
|
||||
// close the index
|
||||
indexToDelete.Close()
|
||||
err := indexToDelete.Close()
|
||||
if err != nil {
|
||||
showError(w, req, fmt.Sprintf("error closing index: %v", err), 500)
|
||||
return
|
||||
}
|
||||
|
||||
// now delete it
|
||||
err := os.RemoveAll(h.indexPath(indexName))
|
||||
err = os.RemoveAll(h.indexPath(indexName))
|
||||
if err != nil {
|
||||
showError(w, req, fmt.Sprintf("error deleting index: %v", err), 500)
|
||||
return
|
||||
|
|
|
@ -52,7 +52,7 @@ type IndexReader interface {
|
|||
|
||||
DocCount() uint64
|
||||
|
||||
Close()
|
||||
Close() error
|
||||
}
|
||||
|
||||
type FieldTerms map[string][]string
|
||||
|
@ -76,18 +76,18 @@ type TermFieldReader interface {
|
|||
Next() (*TermFieldDoc, error)
|
||||
Advance(ID string) (*TermFieldDoc, error)
|
||||
Count() uint64
|
||||
Close()
|
||||
Close() error
|
||||
}
|
||||
|
||||
type FieldReader interface {
|
||||
Next() (*TermFieldDoc, error)
|
||||
Close()
|
||||
Close() error
|
||||
}
|
||||
|
||||
type DocIDReader interface {
|
||||
Next() (string, error)
|
||||
Advance(ID string) (string, error)
|
||||
Close()
|
||||
Close() error
|
||||
}
|
||||
|
||||
type Batch struct {
|
||||
|
|
|
@ -70,8 +70,8 @@ func (r *UpsideDownCouchFieldReader) Next() (*index.TermFieldDoc, error) {
|
|||
|
||||
}
|
||||
|
||||
func (r *UpsideDownCouchFieldReader) Close() {
|
||||
r.iterator.Close()
|
||||
func (r *UpsideDownCouchFieldReader) Close() error {
|
||||
return r.iterator.Close()
|
||||
}
|
||||
|
||||
func incrementBytes(in []byte) []byte {
|
||||
|
|
|
@ -133,6 +133,6 @@ func (i *IndexReader) DocCount() uint64 {
|
|||
return i.docCount
|
||||
}
|
||||
|
||||
func (i *IndexReader) Close() {
|
||||
i.kvreader.Close()
|
||||
func (i *IndexReader) Close() error {
|
||||
return i.kvreader.Close()
|
||||
}
|
||||
|
|
|
@ -100,8 +100,8 @@ func (r *UpsideDownCouchTermFieldReader) Advance(docID string) (*index.TermField
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
func (r *UpsideDownCouchTermFieldReader) Close() {
|
||||
r.iterator.Close()
|
||||
func (r *UpsideDownCouchTermFieldReader) Close() error {
|
||||
return r.iterator.Close()
|
||||
}
|
||||
|
||||
type UpsideDownCouchDocIDReader struct {
|
||||
|
@ -167,6 +167,6 @@ func (r *UpsideDownCouchDocIDReader) Advance(docID string) (string, error) {
|
|||
return "", nil
|
||||
}
|
||||
|
||||
func (r *UpsideDownCouchDocIDReader) Close() {
|
||||
r.iterator.Close()
|
||||
func (r *UpsideDownCouchDocIDReader) Close() error {
|
||||
return r.iterator.Close()
|
||||
}
|
||||
|
|
|
@ -152,8 +152,11 @@ func NewFieldRowKV(key, value []byte) (*FieldRow, error) {
|
|||
rv := FieldRow{}
|
||||
|
||||
buf := bytes.NewBuffer(key)
|
||||
buf.ReadByte() // type
|
||||
err := binary.Read(buf, binary.LittleEndian, &rv.index)
|
||||
_, err := buf.ReadByte() // type
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = binary.Read(buf, binary.LittleEndian, &rv.index)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -282,9 +285,11 @@ func NewTermFrequencyRowK(key []byte) (*TermFrequencyRow, error) {
|
|||
doc: []byte(""),
|
||||
}
|
||||
buf := bytes.NewBuffer(key)
|
||||
buf.ReadByte() // type
|
||||
_, err := buf.ReadByte() // type
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var err error
|
||||
err = binary.Read(buf, binary.LittleEndian, &rv.field)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -439,9 +444,11 @@ func NewBackIndexRowKV(key, value []byte) (*BackIndexRow, error) {
|
|||
rv := BackIndexRow{}
|
||||
|
||||
buf := bytes.NewBuffer(key)
|
||||
buf.ReadByte() // type
|
||||
_, err := buf.ReadByte() // type
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var err error
|
||||
rv.doc, err = buf.ReadBytes(ByteSeparator)
|
||||
if err == io.EOF && len(rv.doc) < 1 {
|
||||
err = fmt.Errorf("invalid doc length 0")
|
||||
|
@ -520,9 +527,11 @@ func NewStoredRowK(key []byte) (*StoredRow, error) {
|
|||
rv := StoredRow{}
|
||||
|
||||
buf := bytes.NewBuffer(key)
|
||||
buf.ReadByte() // type
|
||||
_, err := buf.ReadByte() // type
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var err error
|
||||
rv.doc, err = buf.ReadBytes(ByteSeparator)
|
||||
if len(rv.doc) < 2 { // 1 for min doc id length, 1 for separator
|
||||
err = fmt.Errorf("invalid doc length 0")
|
||||
|
|
|
@ -60,7 +60,10 @@ func (tksc *TopScoreCollector) Collect(searcher search.Searcher) error {
|
|||
for err == nil && next != nil {
|
||||
tksc.collectSingle(next)
|
||||
if tksc.facetsBuilder != nil {
|
||||
tksc.facetsBuilder.Update(next)
|
||||
err = tksc.facetsBuilder.Update(next)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
next, err = searcher.Next()
|
||||
}
|
||||
|
|
|
@ -40,7 +40,8 @@ func (ss *stubSearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
func (ss *stubSearcher) Close() {
|
||||
func (ss *stubSearcher) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ss *stubSearcher) Weight() float64 {
|
||||
|
|
|
@ -73,7 +73,7 @@ func (c DocumentMatchCollection) Less(i, j int) bool { return c[i].Score > c[j].
|
|||
type Searcher interface {
|
||||
Next() (*DocumentMatch, error)
|
||||
Advance(ID string) (*DocumentMatch, error)
|
||||
Close()
|
||||
Close() error
|
||||
Weight() float64
|
||||
SetQueryNorm(float64)
|
||||
Count() uint64
|
||||
|
|
|
@ -169,12 +169,18 @@ func (s *BooleanSearcher) Next() (*search.DocumentMatch, error) {
|
|||
}
|
||||
if s.currMustNot != nil && s.currMustNot.ID == s.currentID {
|
||||
// the candidate is excluded
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
continue
|
||||
}
|
||||
} else if s.currMustNot != nil && s.currMustNot.ID == s.currentID {
|
||||
// the candidate is excluded
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -192,12 +198,18 @@ func (s *BooleanSearcher) Next() (*search.DocumentMatch, error) {
|
|||
}
|
||||
cons = append(cons, s.currShould)
|
||||
rv = s.scorer.Score(cons)
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
break
|
||||
} else if s.shouldSearcher.Min() == 0 {
|
||||
// match is OK anyway
|
||||
rv = s.scorer.Score([]*search.DocumentMatch{s.currMust})
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
break
|
||||
}
|
||||
} else if s.currShould != nil && s.currShould.ID == s.currentID {
|
||||
|
@ -208,16 +220,25 @@ func (s *BooleanSearcher) Next() (*search.DocumentMatch, error) {
|
|||
}
|
||||
cons = append(cons, s.currShould)
|
||||
rv = s.scorer.Score(cons)
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
break
|
||||
} else if s.shouldSearcher == nil || s.shouldSearcher.Min() == 0 {
|
||||
// match is OK anyway
|
||||
rv = s.scorer.Score([]*search.DocumentMatch{s.currMust})
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
s.advanceNextMust()
|
||||
err = s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return rv, nil
|
||||
}
|
||||
|
@ -275,16 +296,26 @@ func (s *BooleanSearcher) Count() uint64 {
|
|||
return sum
|
||||
}
|
||||
|
||||
func (s *BooleanSearcher) Close() {
|
||||
func (s *BooleanSearcher) Close() error {
|
||||
if s.mustSearcher != nil {
|
||||
s.mustSearcher.Close()
|
||||
err := s.mustSearcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if s.shouldSearcher != nil {
|
||||
s.shouldSearcher.Close()
|
||||
err := s.shouldSearcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if s.mustNotSearcher != nil {
|
||||
s.mustNotSearcher.Close()
|
||||
err := s.mustNotSearcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *BooleanSearcher) Min() int {
|
||||
|
|
|
@ -182,10 +182,14 @@ func (s *ConjunctionSearcher) Count() uint64 {
|
|||
return sum
|
||||
}
|
||||
|
||||
func (s *ConjunctionSearcher) Close() {
|
||||
func (s *ConjunctionSearcher) Close() error {
|
||||
for _, searcher := range s.searchers {
|
||||
searcher.Close()
|
||||
err := searcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ConjunctionSearcher) Min() int {
|
||||
|
|
|
@ -174,10 +174,14 @@ func (s *DisjunctionSearcher) Count() uint64 {
|
|||
return sum
|
||||
}
|
||||
|
||||
func (s *DisjunctionSearcher) Close() {
|
||||
func (s *DisjunctionSearcher) Close() error {
|
||||
for _, searcher := range s.searchers {
|
||||
searcher.Close()
|
||||
err := searcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *DisjunctionSearcher) Min() int {
|
||||
|
|
|
@ -94,8 +94,8 @@ func (s *FuzzySearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return s.searcher.Next()
|
||||
}
|
||||
|
||||
func (s *FuzzySearcher) Close() {
|
||||
s.searcher.Close()
|
||||
func (s *FuzzySearcher) Close() error {
|
||||
return s.searcher.Close()
|
||||
}
|
||||
|
||||
func (s *FuzzySearcher) Min() int {
|
||||
|
|
|
@ -80,8 +80,8 @@ func (s *MatchAllSearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return docMatch, nil
|
||||
}
|
||||
|
||||
func (s *MatchAllSearcher) Close() {
|
||||
s.reader.Close()
|
||||
func (s *MatchAllSearcher) Close() error {
|
||||
return s.reader.Close()
|
||||
}
|
||||
|
||||
func (s *MatchAllSearcher) Min() int {
|
||||
|
|
|
@ -44,7 +44,8 @@ func (s *MatchNoneSearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
func (s *MatchNoneSearcher) Close() {
|
||||
func (s *MatchNoneSearcher) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *MatchNoneSearcher) Min() int {
|
||||
|
|
|
@ -101,8 +101,8 @@ func (s *NumericRangeSearcher) Advance(ID string) (*search.DocumentMatch, error)
|
|||
return s.searcher.Advance(ID)
|
||||
}
|
||||
|
||||
func (s *NumericRangeSearcher) Close() {
|
||||
s.searcher.Close()
|
||||
func (s *NumericRangeSearcher) Close() error {
|
||||
return s.searcher.Close()
|
||||
}
|
||||
|
||||
type termRange struct {
|
||||
|
|
|
@ -144,11 +144,17 @@ func (s *PhraseSearcher) Next() (*search.DocumentMatch, error) {
|
|||
// return match
|
||||
rv = s.currMust
|
||||
rv.Locations = rvftlm
|
||||
s.advanceNextMust()
|
||||
err := s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return rv, nil
|
||||
}
|
||||
|
||||
s.advanceNextMust()
|
||||
err := s.advanceNextMust()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
|
@ -176,10 +182,14 @@ func (s *PhraseSearcher) Count() uint64 {
|
|||
return sum
|
||||
}
|
||||
|
||||
func (s *PhraseSearcher) Close() {
|
||||
func (s *PhraseSearcher) Close() error {
|
||||
if s.mustSearcher != nil {
|
||||
s.mustSearcher.Close()
|
||||
err := s.mustSearcher.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *PhraseSearcher) Min() int {
|
||||
|
|
|
@ -86,8 +86,8 @@ func (s *TermSearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return docMatch, nil
|
||||
}
|
||||
|
||||
func (s *TermSearcher) Close() {
|
||||
s.reader.Close()
|
||||
func (s *TermSearcher) Close() error {
|
||||
return s.reader.Close()
|
||||
}
|
||||
|
||||
func (s *TermSearcher) Min() int {
|
||||
|
|
|
@ -72,8 +72,8 @@ func (s *TermPrefixSearcher) Advance(ID string) (*search.DocumentMatch, error) {
|
|||
return s.searcher.Next()
|
||||
}
|
||||
|
||||
func (s *TermPrefixSearcher) Close() {
|
||||
s.searcher.Close()
|
||||
func (s *TermPrefixSearcher) Close() error {
|
||||
return s.searcher.Close()
|
||||
}
|
||||
|
||||
func (s *TermPrefixSearcher) Min() int {
|
||||
|
|
|
@ -37,7 +37,10 @@ func main() {
|
|||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
pprof.StartCPUProfile(f)
|
||||
err = pprof.StartCPUProfile(f)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer pprof.StopCPUProfile()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue