elasticesearch nested多条件多嵌套查询

这篇具有很好参考价值的文章主要介绍了elasticesearch nested多条件多嵌套查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

索引映射结构

"properties": {

                "attrs": {

                    "type": "nested",

                    "properties": {

                        "attrId": {

                            "type": "long"

                        },

                        "attrName": {

                            "type": "keyword",

                        },

                        "attrValue": {

                            "type": "keyword",

                        }

                    }

                },

                ....

}

 导入数据

例如某一条数据拥有的属性attrs列表如下

es 嵌套字段 查询 java,java,数据库,elasticsearch,后端

 需求: 通过多个属性对象(attrId,attrValue)查询同时拥有这些属性对象的目标数据

 思路:构建bool查询,过滤或must多个nested嵌套查询,这里需要多个nested是因为一个nested嵌套查询时匹配到的属性对象为单个闭区间,无法访问到其余属性对象。

错误的方式如下:

es 嵌套字段 查询 java,java,数据库,elasticsearch,后端

 

 es 嵌套字段 查询 java,java,数据库,elasticsearch,后端

 正确的请求:

json 请求实现

{
    "query":{
	"bool": {
		"filter": [{
            "nested": {
				"path": "attrs",
				"query": {
					"bool": {
						"must": [
                            {"term": {"attrs.attrId": {"value": 34}}},
                            {"term":{"attrs.attrValue": {"value": "培根"}}}
                        ]
					}
				},
				"score_mode": "none"
	        }},
            {
			"nested": {
				"path": "attrs",
				"query": {
					"bool": {
						"must": [
                            {"term": { "attrs.attrId": {"value": 41}}},
                            {"term":{"attrs.attrValue": {"value": "上海外语教育出版社"}}}
                        ]
					}
				},
				"score_mode": "none"
			}
		}]
	}
}}

es 嵌套字段 查询 java,java,数据库,elasticsearch,后端      数据查询成功

java api 实现文章来源地址https://www.toymoban.com/news/detail-779634.html

if(attrs!=null && attrs.size()>0){
    for(String attr : attrs){
        BoolQuery.Builder attrValueBoolBuilder=new BoolQuery.Builder();
        String[] attrSplit=attr.split("_");
        String attrId = attrSplit[0];
        String attrValue = attrSplit[1];
        attrValueBoolBuilder.must(m->m
                .term(t->t
                        .field("attrs.attrId").value(Long.parseLong(attrId))
                )
        );
        attrValueBoolBuilder.must(m->m
                .term(t->t
                    .field("attrs.attrValue").value(attrValue)
            )
        );
        NestedQuery nestedQuery=NestedQuery.of(n->n
                .path("attrs")
                .scoreMode(ChildScoreMode.None)
                .query(q->q.bool(attrValueBoolBuilder.build())));

        boolQueryBuilder.filter(f->f.nested(nestedQuery));
    }
}
searchRequestBuilder.query(q->q.bool(boolQueryBuilder.build()));

到了这里,关于elasticesearch nested多条件多嵌套查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?

    这是来自社区的一个真实企业场景问题。 https://elasticsearch.cn/question/13135 如下所示, 希望在查出的结果后, 对结果进行后处理,对tags列表,根据depth进行排序。 Elasticsearch 能支持的排序方式罗列如下: 包含但不限于: 基于特定字段的排序 基于Nested对象字段的排序 基于特定

    2024年02月02日
    浏览(44)
  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(54)
  • ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

    在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。 紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵

    2024年02月02日
    浏览(37)
  • Es Java多字段分组查询

    es按照多个字段分组查询 java 代码实现:

    2024年02月12日
    浏览(37)
  • ES7 and or 关联条件查询JAVA

    @ES7 and or 关联条件查询JAVA 实现条件( platform=‘xxx’ and (home_path=‘xxx’ or nick_name=‘xxx’ )) kibana

    2024年02月08日
    浏览(38)
  • .net 6 使用 NEST 查询,时间字段传值踩坑

    说明: 同事搭建的业务系统,最开始使用  log4net  记录到本地日志. 然后多个项目为了日志统一,全部记录在  Elasticsearch  ,使用  log4net.ElasticSearchAppender.DotNetCore. 然后搭建了 Kibanal   对  Elasticsearch   进行查询.  但是项目组开发人员众多,不是每个人都想要学会如何在  Kibana

    2024年02月01日
    浏览(30)
  • java 整合ES实现文档增删改查(多条件分页查询)

    本文采用ES版本为8.7.1 由于只存储文章,仅用固定索引即可,索引用kibanna直接生成,省略索引部分的增删查步骤 抓取返回信息是因为版本问题无法解析ES返回的正确信息,实际操作成功但是会报错 我这边只需要单索引操作,有需求的可以让前端传过来

    2024年02月13日
    浏览(29)
  • es的nested查询

    一、一层嵌套 mapping: 导入数据到索引: 使用DevTools执行多层嵌套查询 Java查询语句: 二、多层嵌套 mapping: 导入数据到索引 使用DevTools执行多层嵌套查询 Java查询语句:

    2024年02月03日
    浏览(42)
  • Java查询es数据,根据指定id检索(in查询),sql权限过滤,多字段匹配检索,数据排序

    Java集成Elasticsearch,进行索引数据查询,并进行sql权限过滤,指定id检索(in查询),多字段匹配检索,数据排序。由于权限过滤是根据sql语句判断当前用户或其部门可查询的数据,所以采用以下方法: 1.通过sql过滤出当前用户可查询的数据id集合idsList; 2.将当前用户可查询的

    2024年02月22日
    浏览(54)
  • 【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性

    今天遇到了一个bug,大概就是数据库(Mysql)中有一个 type 类型字段,数据类型为json,大概是这样的:[“苹果”,“香蕉”,“葡萄”]的数据格式,这个bug的问题所在呢就是查询后这个json格式的数据无法映射到我们实体类的属性上,解决方案如下: 实体类的配置: @TableField

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包