Elasticsearch源码分析七--调用Lucene查询接口之范围查询

本文深入探讨Elasticsearch中的范围查询,解释如何使用查询语法来筛选特定字段值在一定范围内的文档。通过分析源码,揭示了Elasticsearch如何调用Apache Lucene接口进行范围查询,包括gte、lte、gt和lt等参数的处理,以实现字典顺序的排序。
摘要由CSDN通过智能技术生成
  • 简介
  • 查询语法
  • 源码分析

简介

范围搜索匹配某个域上的值在一定范围的文档。范围查询可以包含或者不包含最大值和最小值,排序是按照字典顺序来排序的。范围查询使我们能够找到某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的(将映射到一个不同的Apache Lucene查询)。
范围查询只能针对单个字段,查询参数应封装在字段名称中。

查询语法

例:查找year字段从1700到1900的所有图书
{
“query” : {
“range” : {
“year” : {
“gte” : 1700,
“lte” : 1900
}}}}
范围查询支持以下参数。
gte:范围查询将匹配字段值大于或等于此参数值的文档。
gt:范围查询将匹配字段值大于此参数值的文档。
lte:范围查询将匹配字段值小于或等于此参数值的文档。
lt:范围查询将匹配字段值小于此参数值的文档。

源码分析

'''(1)Elasticsearch code'''
public class RangeQueryParser implements QueryParser {
   

    public static final String NAME = "range";

    @Override
    public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
        XContentParser parser = parseContext.parser();

        XContentParser.Token token = parser.nextToken();
        if (token != XContentParser.Token.FIELD_NAME) {
            throw new QueryParsingException(parseContext.index(), "[range] query malformed, no field to indicate field name");
        }
        String fieldName = parser.currentName();
        token = parser.nextToken();
        if (token != XContentParser.Token.START_OBJECT) {
            throw new QueryParsingException(parseContext.index(), "[range] query malformed, after field missing start object");
        }

        Object from = null;
        Object to = null;
        boolean includeLower = true;
        boolean includeUpper = true;
        float boost = 1.0f;

        String currentFieldName = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值