0

下面是我的弹性查询

 GET _search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "marriages.marriage_year": "1630"
        }
      },
      "should": {
        "match": {
          "first_name": {
            "query": "mary",
            "fuzziness": "2"
          }
        }
      },
      "must": {
        "range": {
          "marriages.marriage_year": {
            "gt": "1620",
            "lte": "1740"
          }
        }
      }
    }
  }
}

它返回的数据以marriages.marriage_year= "1630"Mary 作为 first_name 作为最高分。我还想包括marriages.marriage_year1620 - 1740 之间的数据,这些数据未显示在结果中。它仅显示marriage_year1630的数据

4

1 回答 1

2

那是因为您有两个bool/must子句,而第二个子句在解析 JSON 查询时被消除。像这样重写它,它将起作用:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "marriages.marriage_year": "1630"
          }
        },
        {
          "range": {
            "marriages.marriage_year": {
              "gt": "1620",
              "lte": "1740"
            }
          }
        }
      ],
      "should": {
        "match": {
          "first_name": {
            "query": "mary",
            "fuzziness": "2"
          }
        }
      }
    }
  }
}

更新

然后你需要做不同的事情,bool/must你只需要range查询并移动部分match内部bool/should

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "marriages.marriage_year": {
              "gt": "1620",
              "lte": "1740"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "first_name": {
              "query": "mary",
              "fuzziness": "2"
            }
          }
        },
        {
          "match": {
            "marriages.marriage_year": "1630"
          }
        }
      ]
    }
  }
}
于 2017-05-10T10:38:42.587 回答