github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/search/docs.go (about) 1 package search 2 3 import ( 4 "fmt" 5 . "github.com/balzaczyy/golucene/core/index/model" 6 // . "github.com/balzaczyy/golucene/core/search/model" 7 "math" 8 ) 9 10 // search/Scorer.java 11 12 type Scorer interface { 13 DocsEnum 14 IScorer 15 // ScoreAndCollect(c Collector) error 16 } 17 18 type IScorer interface { 19 Score() (float32, error) 20 } 21 22 type ScorerSPI interface { 23 DocId() int 24 NextDoc() (int, error) 25 } 26 27 type abstractScorer struct { 28 spi ScorerSPI 29 // index.DocsEnum 30 // IScorer 31 /** the Scorer's parent Weight. in some cases this may be null */ 32 // TODO can we clean this up? 33 weight Weight 34 } 35 36 func newScorer(spi ScorerSPI, w Weight) *abstractScorer { 37 return &abstractScorer{spi: spi, weight: w} 38 } 39 40 /** Scores and collects all matching documents. 41 * @param collector The collector to which all matching documents are passed. 42 */ 43 // func (s *abstractScorer) ScoreAndCollect(c Collector) (err error) { 44 // assert(s.spi.DocId() == -1) // not started 45 // c.SetScorer(s.spi.(Scorer)) 46 // doc, err := s.spi.NextDoc() 47 // for doc != NO_MORE_DOCS && err == nil { 48 // c.Collect(doc) 49 // doc, err = s.spi.NextDoc() 50 // } 51 // return 52 // } 53 54 func assert(ok bool) { 55 if !ok { 56 panic("assert fail") 57 } 58 } 59 60 func assert2(ok bool, msg string, args ...interface{}) { 61 if !ok { 62 panic(fmt.Sprintf(msg, args...)) 63 } 64 } 65 66 // search/BulkScorer.java 67 68 /* 69 This class is used to score a range of documents at once, and is 70 returned by Weight.BulkScorer(). Only queries that have a more 71 optimized means of scoring across a range of documents need to 72 override this. Otherwise, a default implementation is wrapped around 73 the Scorer returned by Weight.Scorer(). 74 */ 75 type BulkScorer interface { 76 ScoreAndCollect(Collector) error 77 BulkScorerImplSPI 78 } 79 80 type BulkScorerImplSPI interface { 81 ScoreAndCollectUpto(Collector, int) (bool, error) 82 } 83 84 type BulkScorerImpl struct { 85 spi BulkScorerImplSPI 86 } 87 88 func newBulkScorer(spi BulkScorerImplSPI) *BulkScorerImpl { 89 return &BulkScorerImpl{spi} 90 } 91 92 func (bs *BulkScorerImpl) ScoreAndCollect(collector Collector) (err error) { 93 assert(bs != nil) 94 assert(bs.spi != nil) 95 _, err = bs.spi.ScoreAndCollectUpto(collector, math.MaxInt32) 96 return 97 }