一文掌握Es的DSL查询 *** 作

一文掌握Es的DSL查询 *** 作,第1张

一文掌握Es的DSL查询 *** 作

ES在查询的时候非常方便,
笔者总结了Es的基础查询 *** 作,供大家指正和学习。

match_all

全部查询,配合其他的 *** 作进行数据的筛选,字段的筛选等,并且伴随着条件的增加,建议使用POST方式,

POST /index/_search
{
    "query": {
        "match_all": {}
    }
}
筛选字段

_source对需要的字段进行筛选。

分页

from a size b 拿到目的集合中索引为a到b的数据。

{
    "query": {
        "match_all": {}
    },
    "_source": [
        "id",
        "nickname",
        "age"
    ],
    "from": 0,
    "size": 10
}
排序

text类型无法排序,keyword类型可以,对于text,可以用它的.keyword进行排序,

 "sort": [
        {
            "age": "asc"
        },
        {
            "money": "desc"
        }
   ]
must

需要满足条件列表中的所有

term/terms

不进行分词搜索,仅仅支持一个字段的筛选,筛选出包含该字符的数据。

term精确匹配,不会进行分词。

terms则表示根据一个列表进行匹配。

对于text文本的信息,能够进行分词,则使用包含搜索信息分词的就能被成功筛选。

然而text类型也有个keyword,不支持分词,其值也text文本内容,用keyword需要全量输入搜索信息才能被成功筛选。

参考:https://blog.csdn.net/dg19971024/article/details/107103201

{
    "query": {
    	"terms":{
    	"name1":"霸王别姬"
    	}
    	
        "terms": {
            "name1.keyword": ["霸王别姬","肖申克的救赎"]
        }
    }
}
match

在查询时,是进行了分词的 *** 作。查询包含某字符分词结果数据的信息。查询也有正则和前缀查询到时候搜。

对于查询的时候,如果是text类型,也可以使用它的.keyword进行相关查询,具体情况具体分析。

例如:我是你爸爸,被分词为 我,是,你,爸爸,筛选结果会是包含其分词结果的数据(具体条件可以定义)。

{
    "query": {
        "match": { 
             "name1": {
                "query": "我是你爸爸",
                "boost": 2
            } 
            }
    }
}

具体条件约束

名词选择说明operator“or”/“and”如我爱你,被分词我,爱,你,那么or的话含有任意一个分词就行,and则是需要都包含minimum_should_match一个百分数percent目标字符串被分为n个词,筛选出出来的数据会包含n*percent个字符boost权重,不设置为1,提高权重设大于1的整数。 multi_match

多字段匹配,可以在每个字段后面添加^n,指定权重。各个字段也可以使用*代替前缀或者后缀。

POST /movie/_search
{
    "query": {
        "multi_match": {
             "query": "我是你爸爸",
            "fields": [
                "name1^2",
                "*_content"
            ],
             "type": "cross_fields"
            }
    }
}
参数 type 值说明best_fields按照match检索,所有字段单独计算得分并取最高分的field为最终_score,虽然是默认值,但不建议使用,数据量上来后查询性能会下降most_fields按照match检索,融合所有field得分为最终_scorecross_fields将fields中的所有字段融合成一个大字段进行match检索,此时要求所有字段使用相同分析器Phrase按照match_phrase检索,默认slop为0,执行短语精确匹配,所以即便设置 minimum_should_match 也无效; 取最高字段得分phrase_prefix按照match_phrase_prefix检索,滑动步长slop默认为0;取最高字段得分bool_prefix按照match_bool_prefix检索 tie_breaker

取值范围0-1,当type使用默认值 best_fields ,tie_breaker将会改变默认_score计算方式,采用best_field_score + tie_breaker*other_field_score。

analyzer

用户搜索输入词采用哪种解析器进行分词,默认使用mapping阶段指定的分词器;如果analyzer设置和索引阶段的分词器不一致时,且operator为and 那么在执行查询时可能理应完全匹配的短语结果检索为空的情况。

fuzziness

指定模糊程度,支持数字或auto

prefix_length

当使用模糊查询时,用来指定前缀不变长度

lenient

当查询报错时是否忽略该文档,默认为false

operator

匹配关系的逻辑判断,默认为or,当为and时表示所有输入词必须完全匹配

minimum_should_match

该参数生效的前提是operator为or,支持数字、百分比或者混合配置,

zero_terms_query

当用户输入词全部为停用词时是否返回文档,默认为none即不返回数据,设置为all时,查询将被改写为match_all

auto_generate_synonyms_phrase_query

是否开启同义词查询,默认为true

组合查询 must

是指要同时满足多个条件

should

满足一个条件就行。

must_not

都不满足。

filter

四者可以同时使用,里面都是方term/match

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "desc": "大学"
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "sex": "1"
                    }
                }
            ],
            "should": [
                {
                    "range": {
                        "age": {
                            "gt": "18",
                            "lt": "22"
                        }
                    }
                },
                {
                    "match": {
                        "desc": "毕业"
                    }
                }
            ]
        }
    }
}
过滤查询

进行范围筛选

{
    "query": {
        "match": {
            "desc": "大学"
        }
    },
    "post_filter": {
        "range": {
            "money": {
                "gt": 100,
                "lt": 1000
            }
        }
    }
}
高亮

将目标字符创高亮

{
    "query": {
        "match": {
            "desc": "沙僧"
        }
    },
    "highlight": {
        "pre_tags": [
            ""
        ],
        "post_tags": [
            ""
        ],
        "fields": {
            "desc": {}
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5706705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存