You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

query.go 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package bleve
  4. import (
  5. "code.gitea.io/gitea/modules/optional"
  6. "github.com/blevesearch/bleve/v2"
  7. "github.com/blevesearch/bleve/v2/search/query"
  8. )
  9. // NumericEqualityQuery generates a numeric equality query for the given value and field
  10. func NumericEqualityQuery(value int64, field string) *query.NumericRangeQuery {
  11. f := float64(value)
  12. tru := true
  13. q := bleve.NewNumericRangeInclusiveQuery(&f, &f, &tru, &tru)
  14. q.SetField(field)
  15. return q
  16. }
  17. // MatchPhraseQuery generates a match phrase query for the given phrase, field and analyzer
  18. func MatchPhraseQuery(matchPhrase, field, analyzer string) *query.MatchPhraseQuery {
  19. q := bleve.NewMatchPhraseQuery(matchPhrase)
  20. q.FieldVal = field
  21. q.Analyzer = analyzer
  22. return q
  23. }
  24. // PrefixQuery generates a match prefix query for the given prefix and field
  25. func PrefixQuery(matchPrefix, field string) *query.PrefixQuery {
  26. q := bleve.NewPrefixQuery(matchPrefix)
  27. q.FieldVal = field
  28. return q
  29. }
  30. // BoolFieldQuery generates a bool field query for the given value and field
  31. func BoolFieldQuery(value bool, field string) *query.BoolFieldQuery {
  32. q := bleve.NewBoolFieldQuery(value)
  33. q.SetField(field)
  34. return q
  35. }
  36. func NumericRangeInclusiveQuery(min, max optional.Option[int64], field string) *query.NumericRangeQuery {
  37. var minF, maxF *float64
  38. var minI, maxI *bool
  39. if min.Has() {
  40. minF = new(float64)
  41. *minF = float64(min.Value())
  42. minI = new(bool)
  43. *minI = true
  44. }
  45. if max.Has() {
  46. maxF = new(float64)
  47. *maxF = float64(max.Value())
  48. maxI = new(bool)
  49. *maxI = true
  50. }
  51. q := bleve.NewNumericRangeInclusiveQuery(minF, maxF, minI, maxI)
  52. q.SetField(field)
  53. return q
  54. }