diff options
Diffstat (limited to 'src/pattern.go')
| -rw-r--r-- | src/pattern.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/pattern.go b/src/pattern.go index ee1b88a5..c736be3c 100644 --- a/src/pattern.go +++ b/src/pattern.go @@ -23,6 +23,7 @@ type termType int const ( termFuzzy termType = iota termExact + termExactBoundary termPrefix termSuffix termEqual @@ -147,6 +148,7 @@ func BuildPattern(cache *ChunkCache, patternCache map[string]*Pattern, fuzzy boo ptr.procFun[termFuzzy] = fuzzyAlgo ptr.procFun[termEqual] = algo.EqualMatch ptr.procFun[termExact] = algo.ExactMatchNaive + ptr.procFun[termExactBoundary] = algo.ExactMatchBoundary ptr.procFun[termPrefix] = algo.PrefixMatch ptr.procFun[termSuffix] = algo.SuffixMatch @@ -193,7 +195,14 @@ func parseTerms(fuzzy bool, caseMode Case, normalize bool, str string) []termSet text = text[:len(text)-1] } - if strings.HasPrefix(text, "'") { + if fuzzy && len(text) > 2 && strings.HasPrefix(text, "'") && strings.HasSuffix(text, "'") || + !fuzzy && !strings.HasPrefix(text, "'") && strings.HasSuffix(text, "'") { + typ = termExactBoundary + if fuzzy { + text = text[1:] + } + text = text[:len(text)-1] + } else if strings.HasPrefix(text, "'") { // Flip exactness if fuzzy && !inv { typ = termExact |
