查询数据 III

Range查询

范围查询可以对数值类型的字段进行查询,返回符合指定范围的结果。可以使用以下比较运算符:

  • 大于: [gt]
  • 小于: [lt]
  • 大于等于: [gte]
  • 小于等于: [lte]

以下查询将返回发行年份在2014 和 2016之间的电影。可以尝试使用不同的条件:

GET my-movie-index/_search
{
  "query": {
    "range": {
      "year": {
        "gt": 2014,
        "lt": 2016
      }
    }
  }
}

与之前一样,可以将 range 查询与其他类型的查询组合使用:

GET my-movie-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "year": {
              "gt": 2014,
              "lt": 2016
            }
          }
        },
        {
          "match": {
            "genres": "action"
          }
        }
      ]
    }
  }
}

Boost查询

在之前学习的内容中,OpenSearch使用评分算法对文档进行评分和排序,然后返回结果。可以使用boosting来影响评分。当对一个字段进行boosting时,会将该字段中匹配的词项的评分乘以一个boost因子。

以下示例展示了在没有boosting和使用boosting的情况下的查询样例。在没有boosting的情况下,输出结果集将按照搜索词horror的默认顺序排列:

GET my-movie-index/_search
{
  "query": {
    "multi_match": {
      "query": "horror",
      "fields": ["title","plot"]
    }
  }
}

使用boosting功能,通过在查询中使用插入符号(^)运算符为电影的title字段分配更大的权重。例如,title^2将使这个字段的匹配结果的得分翻倍,title^3将使其得分翻三倍。比较应用boosting前后结果的_score

GET my-movie-index/_search
{
  "query": {
    "multi_match": {
      "query": "horror",
      "fields": ["title^2","plot"]
    }
  }
}

通过提高title字段的权重,可以看到结果的排序发生了变化。

当使用OpenSearch进行搜索时,通常会根据字段的重要性对其进行加权。像”[title]","[product_name]“等字段通常比描述性字段如”[description]","[plot]","[comments]“等更重要。