ranker_worker.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package engine
  2. import (
  3. "github.com/huichen/wukong/types"
  4. )
  5. type rankerAddScoringFieldsRequest struct {
  6. docId uint64
  7. fields interface{}
  8. }
  9. type rankerRankRequest struct {
  10. docs []types.IndexedDocument
  11. options types.RankOptions
  12. rankerReturnChannel chan rankerReturnRequest
  13. }
  14. type rankerReturnRequest struct {
  15. docs types.ScoredDocuments
  16. }
  17. type rankerRemoveScoringFieldsRequest struct {
  18. docId uint64
  19. }
  20. func (engine *Engine) rankerAddScoringFieldsWorker(shard int) {
  21. for {
  22. request := <-engine.rankerAddScoringFieldsChannels[shard]
  23. engine.rankers[shard].AddScoringFields(request.docId, request.fields)
  24. }
  25. }
  26. func (engine *Engine) rankerRankWorker(shard int) {
  27. for {
  28. request := <-engine.rankerRankChannels[shard]
  29. if request.options.MaxOutputs != 0 {
  30. request.options.MaxOutputs += request.options.OutputOffset
  31. }
  32. request.options.OutputOffset = 0
  33. outputDocs := engine.rankers[shard].Rank(request.docs, request.options)
  34. request.rankerReturnChannel <- rankerReturnRequest{docs: outputDocs}
  35. }
  36. }
  37. func (engine *Engine) rankerRemoveScoringFieldsWorker(shard int) {
  38. for {
  39. request := <-engine.rankerRemoveScoringFieldsChannels[shard]
  40. engine.rankers[shard].RemoveScoringFields(request.docId)
  41. }
  42. }