0
0
Fork 0

term field reader supports optionally omitting 3 details

at the time you create the term field reader, you can specify
that you don't need the term freq, the norm, or the term vectors

in that case, the index implementation can choose to not return
them in its subsequently returned values

this is advisory only, some simple implementations may ignore this
and continue to return the values anyway (as the current impl of
upside_down does today)

this change will allow future index implementations the
opportunity to do less work when it isn't required
This commit is contained in:
Marty Schoch 2016-07-30 10:26:42 -04:00
parent 389e18a779
commit 47ee69ae82
6 changed files with 12 additions and 12 deletions

View File

@ -60,7 +60,7 @@ type AsyncIndex interface {
}
type IndexReader interface {
TermFieldReader(term []byte, field string) (TermFieldReader, error)
TermFieldReader(term []byte, field string, includeFreq, includeNorm, includeTermVectors bool) (TermFieldReader, error)
// DocIDReader returns an iterator over documents which identifiers are
// greater than or equal to start and smaller than end. Set start to the

View File

@ -23,12 +23,12 @@ type IndexReader struct {
docCount uint64
}
func (i *IndexReader) TermFieldReader(term []byte, fieldName string) (index.TermFieldReader, error) {
func (i *IndexReader) TermFieldReader(term []byte, fieldName string, includeFreq, includeNorm, includeTermVectors bool) (index.TermFieldReader, error) {
fieldIndex, fieldExists := i.index.fieldCache.FieldNamed(fieldName, false)
if fieldExists {
return newUpsideDownCouchTermFieldReader(i, term, uint16(fieldIndex))
return newUpsideDownCouchTermFieldReader(i, term, uint16(fieldIndex), includeFreq, includeNorm, includeTermVectors)
}
return newUpsideDownCouchTermFieldReader(i, []byte{ByteSeparator}, ^uint16(0))
return newUpsideDownCouchTermFieldReader(i, []byte{ByteSeparator}, ^uint16(0), includeFreq, includeNorm, includeTermVectors)
}
func (i *IndexReader) FieldDict(fieldName string) (index.FieldDict, error) {

View File

@ -25,7 +25,7 @@ type UpsideDownCouchTermFieldReader struct {
field uint16
}
func newUpsideDownCouchTermFieldReader(indexReader *IndexReader, term []byte, field uint16) (*UpsideDownCouchTermFieldReader, error) {
func newUpsideDownCouchTermFieldReader(indexReader *IndexReader, term []byte, field uint16, includeFreq, includeNorm, includeTermVectors bool) (*UpsideDownCouchTermFieldReader, error) {
dictionaryRow := NewDictionaryRow(term, field, 0)
val, err := indexReader.kvreader.Get(dictionaryRow.Key())
if err != nil {

View File

@ -72,7 +72,7 @@ func TestIndexReader(t *testing.T) {
}()
// first look for a term that doesn't exist
reader, err := indexReader.TermFieldReader([]byte("nope"), "name")
reader, err := indexReader.TermFieldReader([]byte("nope"), "name", true, true, true)
if err != nil {
t.Errorf("Error accessing term field reader: %v", err)
}
@ -85,7 +85,7 @@ func TestIndexReader(t *testing.T) {
t.Fatal(err)
}
reader, err = indexReader.TermFieldReader([]byte("test"), "name")
reader, err = indexReader.TermFieldReader([]byte("test"), "name", true, true, true)
if err != nil {
t.Errorf("Error accessing term field reader: %v", err)
}
@ -123,7 +123,7 @@ func TestIndexReader(t *testing.T) {
},
},
}
tfr, err := indexReader.TermFieldReader([]byte("rice"), "desc")
tfr, err := indexReader.TermFieldReader([]byte("rice"), "desc", true, true, true)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
@ -140,7 +140,7 @@ func TestIndexReader(t *testing.T) {
}
// now test usage of advance
reader, err = indexReader.TermFieldReader([]byte("test"), "name")
reader, err = indexReader.TermFieldReader([]byte("test"), "name", true, true, true)
if err != nil {
t.Errorf("Error accessing term field reader: %v", err)
}
@ -168,7 +168,7 @@ func TestIndexReader(t *testing.T) {
}
// now test creating a reader for a field that doesn't exist
reader, err = indexReader.TermFieldReader([]byte("water"), "doesnotexist")
reader, err = indexReader.TermFieldReader([]byte("water"), "doesnotexist", true, true, true)
if err != nil {
t.Errorf("Error accessing term field reader: %v", err)
}

View File

@ -1119,7 +1119,7 @@ func TestIndexTermReaderCompositeFields(t *testing.T) {
}
}()
termFieldReader, err := indexReader.TermFieldReader([]byte("mister"), "_all")
termFieldReader, err := indexReader.TermFieldReader([]byte("mister"), "_all", true, true, true)
if err != nil {
t.Error(err)
}

View File

@ -26,7 +26,7 @@ type TermSearcher struct {
}
func NewTermSearcher(indexReader index.IndexReader, term string, field string, boost float64, explain bool) (*TermSearcher, error) {
reader, err := indexReader.TermFieldReader([]byte(term), field)
reader, err := indexReader.TermFieldReader([]byte(term), field, true, true, true)
if err != nil {
return nil, err
}