在elasticsearch中实现加权自定义评分查询时,无法获得平均值

dsf9zpds  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(0)|浏览(325)

我正在尝试构建一个查询,返回一个包含相关分数的概要文件列表。完整查询由许多子查询组成。
每个子查询都会向概要文件询问一个问题,如“员工总数是否>50”。我想要以下行为
如果存在并且在范围内,则返回1分
如果存在且不在范围内,则不返回
如果缺少,则返回得分为0的。
然后,我想取所有子查询分数的平均值来给出查询分数。显然,如果任何查询字段存在并且超出范围,则不会返回该字段。
我尝试的方法是使用函数得分查询。这是一系列失败尝试的最后一次迭代:(。
这将返回正确的配置文件;但比分总是1分。我想得分为0.5,如果员工人数在范围内,流动性不存在(说)。
任何帮助都将不胜感激,
谢谢,
帕斯卡。

  1. POST /api_test/_search
  2. {
  3. "query": {
  4. "function_score": {
  5. "functions": [
  6. {
  7. "filter": {
  8. "range": {
  9. "companyProps.headcount": {
  10. "lte": "1000",
  11. "gte": "5"
  12. }
  13. }
  14. },
  15. "weight": 1
  16. },
  17. {
  18. "filter": {
  19. "missing": {
  20. "field": "companyProps.headcount"
  21. }
  22. },
  23. "weight": 0
  24. },
  25. {
  26. "filter": {
  27. "range": {
  28. "companyProps.turnover": {
  29. "lte": "1000",
  30. "gte": "100"
  31. }
  32. }
  33. },
  34. "weight": 1
  35. },
  36. {
  37. "filter": {
  38. "missing": {
  39. "field": "companyProps.turnover"
  40. }
  41. },
  42. "weight": 0
  43. }
  44. ],
  45. "query": {
  46. "filtered": {
  47. "query": {
  48. "match_all": {}
  49. },
  50. "filter": {
  51. "bool": {
  52. "must": [
  53. {
  54. "bool": {
  55. "should": [
  56. {
  57. "range": {
  58. "companyProps.headcount": {
  59. "lte": "1000",
  60. "gte": "5"
  61. }
  62. }
  63. },
  64. {
  65. "missing": {
  66. "field": "companyProps.headcount"
  67. }
  68. }
  69. ]
  70. }
  71. },
  72. {
  73. "bool": {
  74. "should": [
  75. {
  76. "range": {
  77. "companyProps.turnover": {
  78. "lte": "1000",
  79. "gte": "100"
  80. }
  81. }
  82. },
  83. {
  84. "missing": {
  85. "field": "companyProps.turnover"
  86. }
  87. }
  88. ]
  89. }
  90. }
  91. ]
  92. }
  93. }
  94. }
  95. },
  96. "score_mode": "avg"
  97. }
  98. }
  99. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题