commit
5934a185f3
@ -77,6 +77,7 @@ type IndexReader interface {
|
|||||||
|
|
||||||
Document(id string) (*document.Document, error)
|
Document(id string) (*document.Document, error)
|
||||||
DocumentFieldTerms(id string) (FieldTerms, error)
|
DocumentFieldTerms(id string) (FieldTerms, error)
|
||||||
|
DocumentFieldTermsForFields(id string, fields []string) (FieldTerms, error)
|
||||||
|
|
||||||
Fields() ([]string, error)
|
Fields() ([]string, error)
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
package upside_down
|
package upside_down
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/blevesearch/bleve/document"
|
"github.com/blevesearch/bleve/document"
|
||||||
"github.com/blevesearch/bleve/index"
|
"github.com/blevesearch/bleve/index"
|
||||||
"github.com/blevesearch/bleve/index/store"
|
"github.com/blevesearch/bleve/index/store"
|
||||||
@ -110,6 +112,33 @@ func (i *IndexReader) DocumentFieldTerms(id string) (index.FieldTerms, error) {
|
|||||||
return rv, nil
|
return rv, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *IndexReader) DocumentFieldTermsForFields(id string, fields []string) (index.FieldTerms, error) {
|
||||||
|
back, err := i.index.backIndexRowForDoc(i.kvreader, id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
rv := make(index.FieldTerms, len(fields))
|
||||||
|
fieldsMap := make(map[uint16]string, len(fields))
|
||||||
|
for _, f := range fields {
|
||||||
|
id, ok := i.index.fieldCache.FieldNamed(f, false)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("Field %s was not found in cache", f)
|
||||||
|
}
|
||||||
|
fieldsMap[id] = f
|
||||||
|
}
|
||||||
|
for _, entry := range back.termEntries {
|
||||||
|
if field, ok := fieldsMap[uint16(*entry.Field)]; ok {
|
||||||
|
terms, ok := rv[field]
|
||||||
|
if !ok {
|
||||||
|
terms = make([]string, 0)
|
||||||
|
}
|
||||||
|
terms = append(terms, *entry.Term)
|
||||||
|
rv[field] = terms
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rv, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (i *IndexReader) Fields() (fields []string, err error) {
|
func (i *IndexReader) Fields() (fields []string, err error) {
|
||||||
fields = make([]string, 0)
|
fields = make([]string, 0)
|
||||||
it := i.kvreader.PrefixIterator([]byte{'f'})
|
it := i.kvreader.PrefixIterator([]byte{'f'})
|
||||||
|
@ -49,6 +49,10 @@ func (fb *DateTimeFacetBuilder) AddRange(name string, start, end time.Time) {
|
|||||||
fb.ranges[name] = &r
|
fb.ranges[name] = &r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fb *DateTimeFacetBuilder) Field() string {
|
||||||
|
return fb.field
|
||||||
|
}
|
||||||
|
|
||||||
func (fb *DateTimeFacetBuilder) Update(ft index.FieldTerms) {
|
func (fb *DateTimeFacetBuilder) Update(ft index.FieldTerms) {
|
||||||
terms, ok := ft[fb.field]
|
terms, ok := ft[fb.field]
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -48,6 +48,10 @@ func (fb *NumericFacetBuilder) AddRange(name string, min, max *float64) {
|
|||||||
fb.ranges[name] = &r
|
fb.ranges[name] = &r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fb *NumericFacetBuilder) Field() string {
|
||||||
|
return fb.field
|
||||||
|
}
|
||||||
|
|
||||||
func (fb *NumericFacetBuilder) Update(ft index.FieldTerms) {
|
func (fb *NumericFacetBuilder) Update(ft index.FieldTerms) {
|
||||||
terms, ok := ft[fb.field]
|
terms, ok := ft[fb.field]
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -32,6 +32,10 @@ func NewTermsFacetBuilder(field string, size int) *TermsFacetBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fb *TermsFacetBuilder) Field() string {
|
||||||
|
return fb.field
|
||||||
|
}
|
||||||
|
|
||||||
func (fb *TermsFacetBuilder) Update(ft index.FieldTerms) {
|
func (fb *TermsFacetBuilder) Update(ft index.FieldTerms) {
|
||||||
terms, ok := ft[fb.field]
|
terms, ok := ft[fb.field]
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
type FacetBuilder interface {
|
type FacetBuilder interface {
|
||||||
Update(index.FieldTerms)
|
Update(index.FieldTerms)
|
||||||
Result() *FacetResult
|
Result() *FacetResult
|
||||||
|
Field() string
|
||||||
}
|
}
|
||||||
|
|
||||||
type FacetsBuilder struct {
|
type FacetsBuilder struct {
|
||||||
@ -37,7 +38,11 @@ func (fb *FacetsBuilder) Add(name string, facetBuilder FacetBuilder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fb *FacetsBuilder) Update(docMatch *DocumentMatch) error {
|
func (fb *FacetsBuilder) Update(docMatch *DocumentMatch) error {
|
||||||
fieldTerms, err := fb.indexReader.DocumentFieldTerms(docMatch.ID)
|
var fields []string
|
||||||
|
for _, facetBuilder := range fb.facets {
|
||||||
|
fields = append(fields, facetBuilder.Field())
|
||||||
|
}
|
||||||
|
fieldTerms, err := fb.indexReader.DocumentFieldTermsForFields(docMatch.ID, fields)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user