Merge pull request #487 from steveyen/optimize-facets-builder
Minor facets builder optimizations
This commit is contained in:
commit
1bd6451581
@ -87,7 +87,7 @@ type FieldTerms map[string][]string
|
|||||||
|
|
||||||
// FieldsNotYetCached returns a list of fields not yet cached out of a larger list of fields
|
// FieldsNotYetCached returns a list of fields not yet cached out of a larger list of fields
|
||||||
func (f FieldTerms) FieldsNotYetCached(fields []string) []string {
|
func (f FieldTerms) FieldsNotYetCached(fields []string) []string {
|
||||||
var rv []string
|
rv := make([]string, 0, len(fields))
|
||||||
for _, field := range fields {
|
for _, field := range fields {
|
||||||
if _, ok := f[field]; !ok {
|
if _, ok := f[field]; !ok {
|
||||||
rv = append(rv, field)
|
rv = append(rv, field)
|
||||||
|
@ -119,12 +119,7 @@ func (i *IndexReader) DocumentFieldTerms(id index.IndexInternalID, fields []stri
|
|||||||
}
|
}
|
||||||
for _, entry := range back.termEntries {
|
for _, entry := range back.termEntries {
|
||||||
if field, ok := fieldsMap[uint16(*entry.Field)]; ok {
|
if field, ok := fieldsMap[uint16(*entry.Field)]; ok {
|
||||||
terms, ok := rv[field]
|
rv[field] = append(rv[field], *entry.Term)
|
||||||
if !ok {
|
|
||||||
terms = make([]string, 0)
|
|
||||||
}
|
|
||||||
terms = append(terms, *entry.Term)
|
|
||||||
rv[field] = terms
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rv, nil
|
return rv, nil
|
||||||
|
@ -29,6 +29,7 @@ type FacetBuilder interface {
|
|||||||
type FacetsBuilder struct {
|
type FacetsBuilder struct {
|
||||||
indexReader index.IndexReader
|
indexReader index.IndexReader
|
||||||
facets map[string]FacetBuilder
|
facets map[string]FacetBuilder
|
||||||
|
fields []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFacetsBuilder(indexReader index.IndexReader) *FacetsBuilder {
|
func NewFacetsBuilder(indexReader index.IndexReader) *FacetsBuilder {
|
||||||
@ -43,14 +44,15 @@ func (fb *FacetsBuilder) Add(name string, facetBuilder FacetBuilder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fb *FacetsBuilder) Update(docMatch *DocumentMatch) error {
|
func (fb *FacetsBuilder) Update(docMatch *DocumentMatch) error {
|
||||||
var fields []string
|
if fb.fields == nil {
|
||||||
for _, facetBuilder := range fb.facets {
|
for _, facetBuilder := range fb.facets {
|
||||||
fields = append(fields, facetBuilder.Field())
|
fb.fields = append(fb.fields, facetBuilder.Field())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(fields) > 0 {
|
if len(fb.fields) > 0 {
|
||||||
// find out which fields haven't been loaded yet
|
// find out which fields haven't been loaded yet
|
||||||
fieldsToLoad := docMatch.CachedFieldTerms.FieldsNotYetCached(fields)
|
fieldsToLoad := docMatch.CachedFieldTerms.FieldsNotYetCached(fb.fields)
|
||||||
// look them up
|
// look them up
|
||||||
fieldTerms, err := fb.indexReader.DocumentFieldTerms(docMatch.IndexInternalID, fieldsToLoad)
|
fieldTerms, err := fb.indexReader.DocumentFieldTerms(docMatch.IndexInternalID, fieldsToLoad)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user