3-16 附:DSL搜索 - 布尔查询
可以组合多重查询

  • must:查询必须匹配搜索条件,譬如 and
  • should:查询匹配满足1个以上条件,譬如 or
  • must_not:不匹配搜索条件,一个都不要满足

实操1:

  1. POST /shop/_doc/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "multi_match": {
  8. "query": "慕课网",
  9. "fields": ["desc", "nickname"]
  10. }
  11. },
  12. {
  13. "term": {
  14. "sex": 1
  15. }
  16. },
  17. {
  18. "term": {
  19. "birthday": "1996-01-14"
  20. }
  21. }
  22. ]
  23. }
  24. }
  25. }
  26. {
  27. "query": {
  28. "bool": {
  29. "should(must_not)": [
  30. {
  31. "multi_match": {
  32. "query": "学习",
  33. "fields": ["desc", "nickname"]
  34. }
  35. },
  36. {
  37. "match": {
  38. "desc": "游戏"
  39. }
  40. },
  41. {
  42. "term": {
  43. "sex": 0
  44. }
  45. }
  46. ]
  47. }
  48. }
  49. }

实操2:

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "match": {
  7. "desc": "慕"
  8. }
  9. },
  10. {
  11. "match": {
  12. "nickname": "慕"
  13. }
  14. }
  15. ],
  16. "should": [
  17. {
  18. "match": {
  19. "sex": "0"
  20. }
  21. }
  22. ],
  23. "must_not": [
  24. {
  25. "term": {
  26. "birthday": "1992-12-24"
  27. }
  28. }
  29. ]
  30. }
  31. }
  32. }

Head 可视化组合查询
DSL搜索 - 布尔查询 - 图1

为指定词语加权

特殊场景下,某些词语可以单独加权,这样可以排得更加靠前。

  1. POST /shop/_doc/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "desc": {
  9. "query": "律师",
  10. "boost": 18
  11. }
  12. }
  13. },
  14. {
  15. "match": {
  16. "desc": {
  17. "query": "进修",
  18. "boost": 2
  19. }
  20. }
  21. }
  22. ]
  23. }
  24. }
  25. }