From 22424da82b01c0ac4ebf3db469a2913bb2564c74 Mon Sep 17 00:00:00 2001 From: Idriss Neumann Date: Fri, 1 Dec 2023 09:34:26 +0100 Subject: [PATCH] Issue #18: improve with operators --- pkg/quickwit/response_parser.go | 23 +++++++++++++++++++++-- pkg/quickwit/response_parser_test.go | 10 +++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/pkg/quickwit/response_parser.go b/pkg/quickwit/response_parser.go index 49cec98..cb787ce 100644 --- a/pkg/quickwit/response_parser.go +++ b/pkg/quickwit/response_parser.go @@ -95,6 +95,17 @@ func parseResponse(responses []*es.SearchResponse, targets []*Query, configuredF return &result, nil } +func isLuceneOperator(value string) bool { + operators := []string{"or", "and"} + for _, op := range operators { + if strings.ToLower(value) == op { + return true + } + } + + return false +} + func parseLuceneQuery(query string) []string { var keywords []string @@ -109,12 +120,20 @@ func parseLuceneQuery(query string) []string { keyValueMatches := keyValueRegex.FindStringSubmatch(termMatch) if len(keyValueMatches) <= 1 { - keywords = append(keywords, strings.ReplaceAll(termMatch, "*", "")) + value := strings.ReplaceAll(termMatch, "*", "") + if isLuceneOperator(value) { + continue + } + keywords = append(keywords, value) continue } for _, keyValueMatch := range keyValueMatches[1:] { - keywords = append(keywords, strings.ReplaceAll(keyValueMatch, "*", "")) + value := strings.ReplaceAll(keyValueMatch, "*", "") + if isLuceneOperator(value) { + continue + } + keywords = append(keywords, value) } } diff --git a/pkg/quickwit/response_parser_test.go b/pkg/quickwit/response_parser_test.go index 90aa6fb..53ea8a0 100644 --- a/pkg/quickwit/response_parser_test.go +++ b/pkg/quickwit/response_parser_test.go @@ -3207,12 +3207,20 @@ func TestParseLuceneQuery(t *testing.T) { require.Equal(t, "foo", highlights[0]) }) - t.Run("LeyValue query", func(t *testing.T) { + t.Run("KeyValue query", func(t *testing.T) { query := "foo:bar*" highlights := parseLuceneQuery(query) require.Len(t, highlights, 1) require.Equal(t, "bar", highlights[0]) }) + + t.Run("MultiKeyValue query", func(t *testing.T) { + query := "foo:bar* AND foo2:bar2" + highlights := parseLuceneQuery(query) + require.Len(t, highlights, 2) + require.Equal(t, "bar", highlights[0]) + require.Equal(t, "bar2", highlights[1]) + }) } func TestFlatten(t *testing.T) {