范围查询可以对数值类型的字段进行查询,返回符合指定范围的结果。可以使用以下比较运算符:
以下查询将返回发行年份在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"
}
}
]
}
}
}
在之前学习的内容中,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]“等更重要。