gitea源码

query.go 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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, fuzziness int) *query.MatchPhraseQuery {
  19. q := bleve.NewMatchPhraseQuery(matchPhrase)
  20. q.FieldVal = field
  21. q.Analyzer = analyzer
  22. q.Fuzziness = fuzziness
  23. return q
  24. }
  25. // MatchAndQuery generates a match query for the given phrase, field and analyzer
  26. func MatchAndQuery(matchPhrase, field, analyzer string, fuzziness int) *query.MatchQuery {
  27. q := bleve.NewMatchQuery(matchPhrase)
  28. q.FieldVal = field
  29. q.Analyzer = analyzer
  30. q.Fuzziness = fuzziness
  31. q.Operator = query.MatchQueryOperatorAnd
  32. return q
  33. }
  34. // BoolFieldQuery generates a bool field query for the given value and field
  35. func BoolFieldQuery(value bool, field string) *query.BoolFieldQuery {
  36. q := bleve.NewBoolFieldQuery(value)
  37. q.SetField(field)
  38. return q
  39. }
  40. func NumericRangeInclusiveQuery(minOption, maxOption optional.Option[int64], field string) *query.NumericRangeQuery {
  41. var minF, maxF *float64
  42. var minI, maxI *bool
  43. if minOption.Has() {
  44. minF = new(float64)
  45. *minF = float64(minOption.Value())
  46. minI = new(bool)
  47. *minI = true
  48. }
  49. if maxOption.Has() {
  50. maxF = new(float64)
  51. *maxF = float64(maxOption.Value())
  52. maxI = new(bool)
  53. *maxI = true
  54. }
  55. q := bleve.NewNumericRangeInclusiveQuery(minF, maxF, minI, maxI)
  56. q.SetField(field)
  57. return q
  58. }