Es条件查询

QueryBuilders.termQuery方法可以用来构建一个term查询,其基本用法如下:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.termQuery("field", "value");

其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的值。

如果要查询多个条件,可以使用BoolQueryBuilder组合多个TermQueryBuilder,如下所示:

java 复制代码
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
        .must(QueryBuilders.termQuery("field1", "value1"))
        .must(QueryBuilders.termQuery("field2", "value2"));

上述代码将构建一个bool查询,其中包含两个term查询,分别查询field1value1field2value2的文档数据。在bool查询中,使用must表示查询条件必须同时满足,还可以使用should表示任意一个条件满足即可,也可以使用mustNot表示条件必须不满足。

range查询可以用来查询一定范围内的值。其基本用法如下:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.rangeQuery("field").from("value1").to("value2");

其中,第一个参数表示要查询的字段名称,from表示起始值,to表示结束值。这里的value1value2可以是任意值,包括数值、日期、字符串等。如果只想查询大于等于某个值或小于等于某个值,可以使用gtelte方法,如下所示:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.rangeQuery("field").gte("value1").lte("value2");

这里的gte表示大于等于value1lte表示小于等于value2

如果要查询在某个值范围内的文档,可以使用includeLowerincludeUpper方法,如下所示:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.rangeQuery("field").from("value1").to("value2").includeLower(true).includeUpper(false);

这里的includeLower(true)表示包含下界(即大于等于value1),includeUpper(false)表示不包含上界(即小于value2)。

match查询用于对某个字段进行文本匹配查询。它能够进行分词,并将查询字符串和分词后的文本进行比较,如果匹配则返回相应的文档。

下面是一个简单的match查询的例子:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.matchQuery("field", "query_string");

其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的字符串。默认情况下,match查询使用的是OR逻辑,即如果查询字符串中的任何一个词项匹配文档中的一个或多个词项,则该文档就会被匹配成功。如果希望使用AND逻辑,则可以使用operator方法,如下所示:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.matchQuery("field", "query_string").operator(Operator.AND);

在上面的例子中,使用了Operator.AND来指定匹配条件为AND逻辑,即只有查询字符串中的所有词项全部匹配文档中的词项时,才会将该文档匹配成功。

match查询还支持模糊匹配功能,可以使用fuzziness方法来设置相似度阈值,如下所示:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.matchQuery("field", "query_string").fuzziness(Fuzziness.AUTO);

这里的Fuzziness.AUTO表示使用自动计算的相似度阈值。

prefix查询用于查询某个字段的前缀匹配。例如,如果要查询所有以某个词语开头的文档,可以使用prefix查询。

下面是一个简单的prefix查询的例子:

java 复制代码
QueryBuilder queryBuilder = QueryBuilders.prefixQuery("field", "prefix_string");

其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的前缀字符串。

prefix查询支持多种参数设置,例如可以使用boost方法来设置查询权重,使用rewrite方法来设置查询重写规则等。另外,需要注意的是,由于prefix查询没有进行分词处理,因此查询字符串应该是一个完整的单词或短语,而不能是一个词项的一部分。

复制代码
SearchHits<Product> shopping = elasticsearchTemplate.search(new NativeSearchQueryBuilder().withQuery(构造器名称).build(), Product.class, IndexCoordinates.of("shopping"));
List<Product> collect = shopping.stream().map(SearchHit::getContent).collect(Collectors.toList());

高亮查询

复制代码
// 设置查询条件matchQuery使用默认分词器
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", title);

// 设置高亮显示
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title");
highlightBuilder.preTags("<em>"); // 高亮标签的前缀
highlightBuilder.postTags("</em>"); // 高亮标签的后缀

// 执行搜索
SearchHits<Product> searchHits = elasticsearchTemplate.search(
        new NativeSearchQueryBuilder()
                .withQuery(queryBuilder)
                .withHighlightBuilder(highlightBuilder)
                .build(),
        Product.class,
        IndexCoordinates.of("shopping")
);

// 处理结果
List<Product> products = new ArrayList<>();
for (SearchHit<Product> searchHit : searchHits) {
    Product product = searchHit.getContent();
    // 获取高亮字段
    Map<String, List<String>> highlightFields = searchHit.getHighlightFields();
    if (highlightFields.containsKey("title")) {
        List<String> titleHighlights = highlightFields.get("title");
        if (!titleHighlights.isEmpty()) {
            String titleHighlight = titleHighlights.get(0);
            product.setTitle(titleHighlight);
        }
    }
    products.add(product);
}
相关推荐
TM1Club6 小时前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
zhang133830890756 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
电商API_180079052477 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
龙山云仓8 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
躺柒9 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独自归家的兔10 小时前
从 “局部凑活“ 到 “全局最优“:AI 规划能力的技术突破与产业落地实践
大数据·人工智能
海域云-罗鹏10 小时前
国内公司与英国总部数据中心/ERP系统互连,SD-WAN专线实操指南
大数据·数据库·人工智能
策知道11 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Henry-SAP12 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
TracyCoder12313 小时前
ElasticSearch内存管理与操作系统(一):内存分配底层原理
大数据·elasticsearch·搜索引擎