support using end key on forestdb iterator for term freq lookup
also additoanl forestdb configs
This commit is contained in:
parent
d3dda3d0ea
commit
3e60ca24ec
|
@ -43,6 +43,16 @@ func newIteratorWithSnapshot(store *Store, snapshot *forestdb.KVStore) *Iterator
|
|||
return &rv
|
||||
}
|
||||
|
||||
func newIteratorWithSnapshotAndRange(store *Store, snapshot *forestdb.KVStore, start, end []byte) *Iterator {
|
||||
itr, err := snapshot.IteratorInit(start, end, forestdb.ITR_NONE)
|
||||
rv := Iterator{
|
||||
store: store,
|
||||
iterator: itr,
|
||||
valid: err == nil,
|
||||
}
|
||||
return &rv
|
||||
}
|
||||
|
||||
func (i *Iterator) SeekFirst() {
|
||||
err := i.iterator.SeekMin()
|
||||
if err != nil {
|
||||
|
|
|
@ -52,6 +52,12 @@ func (r *Reader) Iterator(key []byte) store.KVIterator {
|
|||
return rv
|
||||
}
|
||||
|
||||
func (r *Reader) RangeIterator(start, end []byte) store.KVIterator {
|
||||
rv := newIteratorWithSnapshotAndRange(r.store, r.snapshot, start, end)
|
||||
rv.Seek(start)
|
||||
return rv
|
||||
}
|
||||
|
||||
func (r *Reader) Close() error {
|
||||
return r.snapshot.Close()
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ func New(path string, createIfMissing bool,
|
|||
|
||||
forestDBDefaultConfig := forestdb.DefaultConfig()
|
||||
forestDBDefaultConfig.SetCompactionMode(forestdb.COMPACT_AUTO)
|
||||
forestDBDefaultConfig.SetMultiKVInstances(false)
|
||||
forestDBConfig, err := applyConfig(forestDBDefaultConfig, config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -284,5 +285,8 @@ func applyConfig(c *forestdb.Config, config map[string]interface{}) (
|
|||
if v, exists := config["walThreshold"].(float64); exists {
|
||||
c.SetWalThreshold(uint64(v))
|
||||
}
|
||||
if v, exists := config["maxWriterLockProb"].(float64); exists {
|
||||
c.SetMaxWriterLockProb(uint8(v))
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
|
|
@ -51,3 +51,8 @@ type KVReader interface {
|
|||
Iterator(key []byte) KVIterator
|
||||
Close() error
|
||||
}
|
||||
|
||||
type RangeIterable interface {
|
||||
// iterates keys >= start and < end
|
||||
RangeIterator(start, end []byte) KVIterator
|
||||
}
|
||||
|
|
|
@ -46,7 +46,16 @@ func newUpsideDownCouchTermFieldReader(indexReader *IndexReader, term []byte, fi
|
|||
|
||||
tfr := NewTermFrequencyRow(term, field, "", 0, 0)
|
||||
readerPrefix := tfr.Key()
|
||||
it := indexReader.kvreader.Iterator(readerPrefix)
|
||||
|
||||
var it store.KVIterator
|
||||
switch kvreader := indexReader.kvreader.(type) {
|
||||
case store.RangeIterable:
|
||||
etfr := NewTermFrequencyRow(term[:len(term)-1], field, "", 0, 0)
|
||||
nextTermPrefix := etfr.Key()
|
||||
it = kvreader.RangeIterator(readerPrefix, nextTermPrefix)
|
||||
default:
|
||||
it = kvreader.Iterator(readerPrefix)
|
||||
}
|
||||
|
||||
return &UpsideDownCouchTermFieldReader{
|
||||
indexReader: indexReader,
|
||||
|
|
Loading…
Reference in New Issue
Block a user