Merge pull request #578 from seiflotfy/index-advanced
Add new IndexAdvanced function
This commit is contained in:
commit
17e21be71a
11
index.go
11
index.go
|
@ -49,6 +49,17 @@ func (b *Batch) Index(id string, data interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// IndexAdvanced adds the specified index operation to the
|
||||
// batch which skips the mapping. NOTE: the bleve Index is not updated
|
||||
// until the batch is executed.
|
||||
func (b *Batch) IndexAdvanced(doc *document.Document) (err error) {
|
||||
if doc.ID == "" {
|
||||
return ErrorEmptyID
|
||||
}
|
||||
b.internal.Update(doc)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete adds the specified delete operation to the
|
||||
// batch. NOTE: the bleve Index is not updated until
|
||||
// the batch is executed.
|
||||
|
|
|
@ -253,6 +253,24 @@ func (i *indexImpl) Index(id string, data interface{}) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
// IndexAdvanced takes a document.Document object
|
||||
// skips the mapping and indexes it.
|
||||
func (i *indexImpl) IndexAdvanced(doc *document.Document) (err error) {
|
||||
if doc.ID == "" {
|
||||
return ErrorEmptyID
|
||||
}
|
||||
|
||||
i.mutex.RLock()
|
||||
defer i.mutex.RUnlock()
|
||||
|
||||
if !i.open {
|
||||
return ErrorIndexClosed
|
||||
}
|
||||
|
||||
err = i.i.Update(doc)
|
||||
return
|
||||
}
|
||||
|
||||
// Delete entries for the specified identifier from
|
||||
// the index.
|
||||
func (i *indexImpl) Delete(id string) (err error) {
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"os"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
|
@ -29,9 +30,8 @@ import (
|
|||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"strconv"
|
||||
|
||||
"github.com/blevesearch/bleve/analysis/analyzer/keyword"
|
||||
"github.com/blevesearch/bleve/document"
|
||||
"github.com/blevesearch/bleve/index"
|
||||
"github.com/blevesearch/bleve/index/store/null"
|
||||
"github.com/blevesearch/bleve/mapping"
|
||||
|
@ -1731,3 +1731,76 @@ func TestBug408(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIndexAdvancedCountMatchSearch(t *testing.T) {
|
||||
defer func() {
|
||||
err := os.RemoveAll("testidx")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}()
|
||||
|
||||
index, err := New("testidx", NewIndexMapping())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
for i := 0; i < 10; i++ {
|
||||
wg.Add(1)
|
||||
go func(i int) {
|
||||
b := index.NewBatch()
|
||||
for j := 0; j < 200; j++ {
|
||||
id := fmt.Sprintf("%d", (i*200)+j)
|
||||
|
||||
doc := &document.Document{
|
||||
ID: id,
|
||||
Fields: []document.Field{
|
||||
document.NewTextField("body", []uint64{}, []byte("match")),
|
||||
},
|
||||
CompositeFields: []*document.CompositeField{
|
||||
document.NewCompositeField("_all", true, []string{}, []string{}),
|
||||
},
|
||||
}
|
||||
|
||||
err := b.IndexAdvanced(doc)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
err := index.Batch(b)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
wg.Done()
|
||||
}(i)
|
||||
}
|
||||
wg.Wait()
|
||||
|
||||
// search for something that should match all documents
|
||||
sr, err := index.Search(NewSearchRequest(NewMatchQuery("match")))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// get the index document count
|
||||
dc, err := index.DocCount()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// make sure test is working correctly, doc count should 2000
|
||||
if dc != 2000 {
|
||||
t.Errorf("expected doc count 2000, got %d", dc)
|
||||
}
|
||||
|
||||
// make sure our search found all the documents
|
||||
if dc != sr.Total {
|
||||
t.Errorf("expected search result total %d to match doc count %d", sr.Total, dc)
|
||||
}
|
||||
|
||||
err = index.Close()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue