当前位置 博文首页 > 闫玉林的博客:Elasticsearch实现对某属性等于某值,或为空为nul

    闫玉林的博客:Elasticsearch实现对某属性等于某值,或为空为nul

    作者:[db:作者] 时间:2021-08-17 18:54

    需求

    • elasticsearch查询,需要查询某个值organDn为空或为null,或等于某值
    • sql实现很简单,elasticsearch没有这种语法
    • 需要使用elasticsearch支持的现有语法变通实现

    实现

    • java代码,elasticsearch官方提供的java api接口实现
    • 使用boolQuery()、termQuery()、existsQuery(),利用should方法和mustNot方法
    • 如果需要将第一个等于某值,换成模糊匹配,可以使用QueryBuilders.matchPhraseQuery("organDn",dn);
    • java代码如下:
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
    boolQuery.should(QueryBuilders.termQuery("organDn.keyword",dn));
    boolQuery.should(QueryBuilders.termQuery("organDn",""));
    boolQuery.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("organDn")));
    
    • kibana等工具里可以执行的查询结构体如下:
    {
        "_source": false,
        "query": {
            "bool": {
                "adjust_pure_negative": true,
                "boost": 1.0,
                "disable_coord": false,
                "should": [
                    {
                        "term": {
                            "organDn.keyword": {
                                "value": "o=532d340fb47ed20e08edbc09d0a37b3b,dc=lonsun,dc=cn",
                                "boost": 1.0
                            }
                        }
                    },
                    {
                        "term": {
                            "organDn": {
                                "boost": 1.0,
                                "value": ""
                            }
                        }
                    },
                    {
                        "bool": {
                            "adjust_pure_negative": true,
                            "boost": 1.0,
                            "disable_coord": false,
                            "must_not": [
                                {
                                    "exists": {
                                        "boost": 1.0,
                                        "field": "organDn"
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "size": 10
    }
    
    • 如果等于某值换成模糊匹配like某值,搜索结构体,should的第一个条件换成
    				{
                        "match_phrase": {
                            "organDn": {
                                "boost": 1.0,
                                "query": "o=532d340fb47ed20e08edbc09d0a37b3b,dc=lonsun,dc=cn",
                                "slop": 0
                            }
                        }
                    }
    
    cs
    下一篇:没有了