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
|
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() {
|
func (i *Iterator) SeekFirst() {
|
||||||
err := i.iterator.SeekMin()
|
err := i.iterator.SeekMin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -52,6 +52,12 @@ func (r *Reader) Iterator(key []byte) store.KVIterator {
|
||||||
return rv
|
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 {
|
func (r *Reader) Close() error {
|
||||||
return r.snapshot.Close()
|
return r.snapshot.Close()
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ func New(path string, createIfMissing bool,
|
||||||
|
|
||||||
forestDBDefaultConfig := forestdb.DefaultConfig()
|
forestDBDefaultConfig := forestdb.DefaultConfig()
|
||||||
forestDBDefaultConfig.SetCompactionMode(forestdb.COMPACT_AUTO)
|
forestDBDefaultConfig.SetCompactionMode(forestdb.COMPACT_AUTO)
|
||||||
|
forestDBDefaultConfig.SetMultiKVInstances(false)
|
||||||
forestDBConfig, err := applyConfig(forestDBDefaultConfig, config)
|
forestDBConfig, err := applyConfig(forestDBDefaultConfig, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -284,5 +285,8 @@ func applyConfig(c *forestdb.Config, config map[string]interface{}) (
|
||||||
if v, exists := config["walThreshold"].(float64); exists {
|
if v, exists := config["walThreshold"].(float64); exists {
|
||||||
c.SetWalThreshold(uint64(v))
|
c.SetWalThreshold(uint64(v))
|
||||||
}
|
}
|
||||||
|
if v, exists := config["maxWriterLockProb"].(float64); exists {
|
||||||
|
c.SetMaxWriterLockProb(uint8(v))
|
||||||
|
}
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,3 +51,8 @@ type KVReader interface {
|
||||||
Iterator(key []byte) KVIterator
|
Iterator(key []byte) KVIterator
|
||||||
Close() error
|
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)
|
tfr := NewTermFrequencyRow(term, field, "", 0, 0)
|
||||||
readerPrefix := tfr.Key()
|
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{
|
return &UpsideDownCouchTermFieldReader{
|
||||||
indexReader: indexReader,
|
indexReader: indexReader,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user