0

我正在尝试优先考虑具有主要类别的记录,而不是具有次要类别的记录,我找到了这个页面

https://www.elastic.co/guide/en/elasticsearch/guide/1.x/query-time-boosting.html这是一个我自己无法使用的基本示例。

我的工作查询:

{  
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "should": [
            [
              {
                "term": {
                  "primaryCategory": "grocery"
                }
              },
              {
                "term": {
                  "categoryIds": "grocery"
                }
              }
            ]
          ]
        }
      }
    }
  },
  "size": 30,
  "from": 0
}

这会返回混合的结果,我希望所有具有主要类别的东西首先出现(例如,杂货店在厨具之前)

这是我失败的尝试

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "should": [
            [
              {
                "term": {
                  "primaryCategory": {
                    "query": "grocery",
                    "boost": 1.5
                  }
                }
              },
              {
                "term": {
                  "categoryIds": {
                    "query": "grocery",
                    "boost": 1
                  }
                }
              }
            ]
          ]
        }
      }
    }
  },
  "size": 30,
  "from": 0
}
4

1 回答 1

1

实现此目的的一种方法是使用dis_max查询和constant score

例子:

{
   "query": {
      "dis_max": {
         "queries": [
            {
               "constant_score": {
                  "filter": {
                     "term": {
                        "primaryCategory": "grocery"
                     }
                  },
                  "boost": 1.5
               }
            },
            {
               "constant_score": {
                  "filter": {
                     "term": {
                        "categoryIds": "grocery"
                     }
                  },
                  "boost": 1
               }
            }
         ]
      }
   },
   "size": 30,
   "from": 0
}

您也可以使用简单的bool-query包装should-clauses在上面的恒定分数。

于 2016-03-09T20:44:23.970 回答