snapshot of https://github.com/blevesearch/bleve.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
Coverage / coverage (push) Failing after 6s
Tests / test (1.24.x, ubuntu-latest) (push) Failing after 42s
Tests / test (1.26.x, ubuntu-latest) (push) Failing after 38s
Tests / test (1.25.x, ubuntu-latest) (push) Failing after 35s
Tests / test (1.25.x, windows-latest) (push) Has been cancelled
Tests / test (1.26.x, macos-latest) (push) Has been cancelled
Tests / test (1.26.x, windows-latest) (push) Has been cancelled
Tests / test (1.24.x, macos-latest) (push) Has been cancelled
Tests / test (1.24.x, windows-latest) (push) Has been cancelled
Tests / test (1.25.x, macos-latest) (push) Has been cancelled
Some checks failed
Coverage / coverage (push) Failing after 6s
Tests / test (1.24.x, ubuntu-latest) (push) Failing after 42s
Tests / test (1.26.x, ubuntu-latest) (push) Failing after 38s
Tests / test (1.25.x, ubuntu-latest) (push) Failing after 35s
Tests / test (1.25.x, windows-latest) (push) Has been cancelled
Tests / test (1.26.x, macos-latest) (push) Has been cancelled
Tests / test (1.26.x, windows-latest) (push) Has been cancelled
Tests / test (1.24.x, macos-latest) (push) Has been cancelled
Tests / test (1.24.x, windows-latest) (push) Has been cancelled
Tests / test (1.25.x, macos-latest) (push) Has been cancelled
This commit is contained in:
98
index/scorch/fuzzy_omitcount_test.go
Normal file
98
index/scorch/fuzzy_omitcount_test.go
Normal file
@@ -0,0 +1,98 @@
|
||||
// Copyright (c) 2026 Couchbase, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
package scorch
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/blevesearch/bleve/v2/document"
|
||||
index "github.com/blevesearch/bleve_index_api"
|
||||
)
|
||||
|
||||
// TestFieldDictFuzzyAutomatonOmitsCount verifies that the fuzzy automaton field
|
||||
// dictionary is wired to the count-omitting iterator: the segment dictionary
|
||||
// implements the optional interface, and the collected candidate entries have
|
||||
// their (discarded) Count left at zero rather than incurring a postings read.
|
||||
func TestFieldDictFuzzyAutomatonOmitsCount(t *testing.T) {
|
||||
cfg := CreateConfig("TestFieldDictFuzzyAutomatonOmitsCount")
|
||||
if err := InitTest(cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { _ = DestroyTest(cfg) }()
|
||||
analysisQueue := index.NewAnalysisQueue(1)
|
||||
idx, err := NewScorch(Name, cfg, analysisQueue)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = idx.Open(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { _ = idx.Close() }()
|
||||
|
||||
// Each doc's "desc" field is a single token (nil analyzer => whole value is
|
||||
// one term). Repeating terms across docs yields multi-doc postings lists.
|
||||
b := index.NewBatch()
|
||||
for d := 0; d < 300; d++ {
|
||||
doc := document.NewDocument(fmt.Sprintf("%d", d))
|
||||
doc.AddField(document.NewTextField("desc", nil, []byte(fmt.Sprintf("term%04d", d%100))))
|
||||
b.Update(doc)
|
||||
}
|
||||
if err = idx.Batch(b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
r, err := idx.Reader()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { _ = r.Close() }()
|
||||
is := r.(*IndexSnapshot)
|
||||
|
||||
// the segment dictionary must implement the count-omit optional interface,
|
||||
// otherwise the wiring silently falls back to the count-reading path.
|
||||
seg := is.segment[0].segment
|
||||
dict, err := seg.Dictionary("desc")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, ok := dict.(termDictionaryOmitCount); !ok {
|
||||
// The omit-count wiring only activates once the zapx dependency ships
|
||||
// AutomatonIteratorOmitCount; until then the code falls back to the
|
||||
// count-reading path, so there is nothing to assert.
|
||||
t.Skipf("segment dict %T does not implement termDictionaryOmitCount "+
|
||||
"(zapx dependency predates the omit-count iterator)", dict)
|
||||
}
|
||||
|
||||
fd, _, err := is.FieldDictFuzzyAutomaton("desc", "term0050", 2, "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
n := 0
|
||||
tfd, err := fd.Next()
|
||||
for err == nil && tfd != nil {
|
||||
n++
|
||||
if tfd.Count != 0 {
|
||||
t.Fatalf("expected omitted (zero) count for %q, got %d", tfd.Term, tfd.Count)
|
||||
}
|
||||
tfd, err = fd.Next()
|
||||
}
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if n == 0 {
|
||||
t.Fatal("expected at least one fuzzy candidate term")
|
||||
}
|
||||
t.Logf("collected %d candidate terms, all with omitted count", n)
|
||||
}
|
||||
Reference in New Issue
Block a user