0
0
A modern text indexing library for go. (this is a mirror of the github repository) http://www.blevesearch.com/
Go to file
Steve Yen d425a3be86 scorch fix disjunction searcher Advance()
Found with "versus" test (TestScorchVersusUpsideDownBoltSmallMNSAM),
which had a boolean query with a MustNot that was the same as the Must
parameters.  This replicates a situation found by
Aruna/Mihir/testrunner/RQG (MB-27291).  Example:

  "query": {
    "must_not": {"disjuncts": [
      {"field": "body", "match": "hello"}
    ]},
    "must": {"conjuncts": [
      {"field": "body", "match": "hello"}
    ]}
  }

The nested searchers along the MustNot pathway would end up looking
roughly like...

  booleanSearcher
    MustNot
      => disjunctionSearcher
         => disjunctionSearcher
            => termSearcher

On the first Next() call by the collector, the two disjunction
searchers would run through their respective Next() method processing,
which includes their initSearcher() processing on the first time.
This has the effect of driving the leaf termSearcher through two
Next() invocations.

That is, if there were 3 docs (doc-1, doc-2, doc-3), the leaf
termSearcher would at this point have moved to point to doc-3, while
the topmost MustNot would have received doc-1.

Next, the booleanSearcher's Must searcher would produce doc-2, so the
booleanSearcher would try to Advance() the MustNot searcher to doc-2.

But, in scorch, the leafmost termSearcher had already gotten past
doc-2 and would return its doc-3.

In upsidedown, in contrast, the leaf termSearcher would then drive the
KVStore iterator with a Seek(doc-2), and the KVStore iterator would
perform a backwards seek to reach doc-2.

In scorch, however, backwards iteration seeking isn't supported.

So, this fix checks the state of the disjunction searcher to see if we
already have the necessary state so that we don't have to perform
actual Advance()'es on the underlying searchers.  This not only fixes
the behavior w.r.t. scorch, but also can have an effect of potentially
making upsidedown slightly faster as we're avoiding some backwards
KVStore iterator seeks.
2017-12-21 18:20:04 -08:00
analysis Fix test 2017-06-22 18:56:28 -04:00
cmd/bleve added hyphen in query sort by option 2017-05-18 11:27:51 -07:00
config remove forestdb from bleve 2017-03-30 12:27:23 -04:00
docs nicer formatting of license header 2016-10-02 10:13:14 -04:00
document remove unused Document.Number property 2017-08-24 16:21:26 -07:00
geo fix geo point distance search 2017-04-27 17:28:07 -04:00
http disable http unit test which relied on debug functionality 2017-12-11 15:38:44 -05:00
index scorch docInternalToNumber returns 0 on error 2017-12-21 16:44:31 -08:00
mapping working in-memory version 2017-11-29 11:33:35 -05:00
numeric add experimental support for indexing/query geo points 2017-03-24 17:22:21 -07:00
registry optimize FacetsBuilder with cached fields & avoid some allocs 2016-10-25 15:34:48 -07:00
search scorch fix disjunction searcher Advance() 2017-12-21 18:20:04 -08:00
test scorch fix disjunction searcher Advance() 2017-12-21 18:20:04 -08:00
vendor try newer version of bolt (seeing random crashes on travis) 2017-12-11 22:09:26 -05:00
.gitignore initial refactor of query into separate package 2016-09-29 14:54:16 -04:00
.travis.yml travis: update go versions 2017-09-12 10:56:33 +02:00
config_app.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
config_disk.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
config.go fix up issues to get all bleve unit tests passing for scorch 2017-12-11 15:47:41 -05:00
CONTRIBUTING.md adding CONTRIBUTING.md to repo 2016-06-26 09:48:43 -04:00
doc.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
error.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
examples_test.go additional golint cleanups 2016-10-02 12:00:01 -04:00
index_alias_impl_test.go simplified MultiSearch requires that indexes honor context deadlines 2016-11-03 16:44:20 -07:00
index_alias_impl.go fix race condition in incorrectly shared state in MultiSearch 2017-04-06 17:49:33 -04:00
index_alias.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
index_impl.go Add new IndexAdvanced function 2017-04-12 00:31:51 +02:00
index_meta_test.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
index_meta.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
index_stats.go nicer formatting of license header 2016-10-02 10:13:14 -04:00
index_test.go try to make racey test safe 2017-12-14 07:53:26 -05:00
index.go add support for BleveType() alternative for type detection 2017-05-19 09:22:12 -04:00
LICENSE adding license file 2014-04-17 17:03:15 -04:00
mapping.go add experimental support for indexing/query geo points 2017-03-24 17:22:21 -07:00
query.go introduce new query TermRange 2017-03-31 22:04:00 -04:00
README.md Apache2 license badge 2017-02-13 16:09:54 -08:00
search_test.go clean up of unit test. 2017-02-02 23:33:26 +05:30
search.go Adding a new bucket setter method for dateTimeRange 2017-06-12 15:53:27 +05:30

bleve bleve

Build Status Coverage Status GoDoc Join the chat at https://gitter.im/blevesearch/bleve codebeat Go Report Card Sourcegraph License

modern text indexing in go - blevesearch.com

Try out bleve live by searching the bleve website.

Features

  • Index any go data structure (including JSON)
  • Intelligent defaults backed up by powerful configuration
  • Supported field types:
    • Text, Numeric, Date
  • Supported query types:
    • Term, Phrase, Match, Match Phrase, Prefix
    • Conjunction, Disjunction, Boolean
    • Numeric Range, Date Range
    • Simple query syntax for human entry
  • tf-idf Scoring
  • Search result match highlighting
  • Supports Aggregating Facets:
    • Terms Facet
    • Numeric Range Facet
    • Date Range Facet

Discussion

Discuss usage and development of bleve in the google group.

Indexing

message := struct{
	Id   string
	From string
	Body string
}{
	Id:   "example",
	From: "marty.schoch@gmail.com",
	Body: "bleve indexing is easy",
}

mapping := bleve.NewIndexMapping()
index, err := bleve.New("example.bleve", mapping)
if err != nil {
	panic(err)
}
index.Index(message.Id, message)

Querying

index, _ := bleve.Open("example.bleve")
query := bleve.NewQueryStringQuery("bleve")
searchRequest := bleve.NewSearchRequest(query)
searchResult, _ := index.Search(searchRequest)

License

Apache License Version 2.0