MCPcopy Index your code
hub / github.com/apache/answer-plugins / buildQuery

Method buildQuery

search-elasticsearch/es.go:243–282  ·  view source on GitHub ↗
(cond *plugin.SearchBasicCond)

Source from the content-addressed store, hash-verified

241}
242
243func (s *SearchEngine) buildQuery(cond *plugin.SearchBasicCond) (
244 query *elastic.BoolQuery) {
245
246 log.Debugf("build query: %+v", cond)
247
248 q := elastic.NewBoolQuery()
249 if len(cond.TagIDs) > 0 {
250 q.Must(elastic.NewTermsQuery("tags", convertToInterfaceSlice(cond.TagIDs)...))
251 }
252 if len(cond.UserID) > 0 {
253 q.Must(elastic.NewTermQuery("user_id", cond.UserID))
254 }
255 if len(cond.QuestionID) > 0 {
256 q.Must(elastic.NewTermQuery("question_id", cond.QuestionID))
257 }
258 if cond.VoteAmount > 0 {
259 q.Must(elastic.NewRangeQuery("score").Gte(cond.VoteAmount))
260 }
261 if cond.ViewAmount > 0 {
262 q.Must(elastic.NewRangeQuery("views").Gte(cond.ViewAmount))
263 }
264 if cond.AnswerAmount > 0 {
265 q.Must(elastic.NewRangeQuery("answers").Gte(cond.AnswerAmount))
266 }
267 if cond.AnswerAccepted == plugin.AcceptedCondTrue {
268 q.Must(elastic.NewTermQuery("has_accepted", true))
269 } else if cond.AnswerAccepted == plugin.AcceptedCondFalse {
270 q.MustNot(elastic.NewTermQuery("has_accepted", true))
271 }
272 if cond.QuestionAccepted == plugin.AcceptedCondTrue {
273 q.MustNot(elastic.NewTermQuery("has_accepted", true))
274 } else if cond.QuestionAccepted == plugin.AcceptedCondFalse {
275 q.Must(elastic.NewTermQuery("has_accepted", false))
276 }
277 if len(cond.Words) > 0 {
278 q.Must(elastic.NewMultiMatchQuery(strings.Join(cond.Words, " "), "title", "content"))
279 }
280 q.Must(elastic.NewTermQuery("status", plugin.SearchContentStatusAvailable))
281 return q
282}
283
284func convertToInterfaceSlice(slice []string) []interface{} {
285 s := make([]interface{}, len(slice))

Callers 3

SearchContentsMethod · 0.95
SearchQuestionsMethod · 0.95
SearchAnswersMethod · 0.95

Calls 1

convertToInterfaceSliceFunction · 0.85

Tested by

no test coverage detected