结合`term`和`match`在`should`中

我想搜索firstField(映射为文本)类似于查询字符串或secondField(映射为整数)等于1的项目。

阅读the docs后,我了解我应该将boolshould一起使用(如here所述):

{
  "query": {
    "bool": {
      "should": [
        {"match": {"firstField":  "queryString"}},{"term":  {"secondField": 1}}
      ]
    }
  }
}

然而,结果表明secondField对结果的贡献远小于firstField,因为它们的评分算法产生了不同的标度。

我正在考虑人为地boost secondField(尽管我猜想这仅在某些情况下有效)或规范化firstField以某种方式表示百分比而不是任意分数。

是否有适当的方法赋予每个字段相同的权重?

注意:我正在使用ES 7.x

wsp0988 回答:结合`term`和`match`在`should`中

似乎您不希望发生计分。在这种情况下,请使用filter context

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "firstField": "queryString"
                }
              },{
                "term": {
                  "secondField": 1
                }
              }
            ]
          }
        }
      ]
    }
  }
}
本文链接:https://www.f2er.com/3163514.html

大家都在问