github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/index/readerUtil.go (about) 1 package index 2 3 // index/ReaderUtil.java 4 5 /* 6 Returns index of the searcher/reader for document n in the slice used 7 to construct this searcher/reader. 8 */ 9 func SubIndex(n int, leaves []*AtomicReaderContext) int { 10 // find searcher/reader for doc n: 11 size := len(leaves) 12 lo, hi := 0, size-1 13 // bi-search starts array, for first element less thann, return its index 14 for lo <= hi { 15 mid := (lo + hi) >> 1 16 midValue := leaves[mid].DocBase 17 if n < midValue { 18 hi = mid - 1 19 } else if n > midValue { 20 lo = mid + 1 21 } else { // found a match 22 for mid+1 < size && leaves[mid+1].DocBase == midValue { 23 mid++ // scan to last match 24 } 25 return mid 26 } 27 } 28 return hi 29 }