ChihiroBlog

Elasticsearch学习记录(DSL查询)

1.叶子查询

  • 介绍:一般是在特定的字段里查询特定的值,属于简单查询,很少单独使用

  • 1.1.全文检索

    • 介绍:利用分词器对用户输入内容进行分词,然后去词条列表中匹配

    • match_query
      GET /items/_search { "query":{ "match":{ "name":"脱脂牛奶" } } }

    • multi_match_query
      GET /items/_search { "query":{ "multi_match":{ "query":"脱脂牛奶", "fields":["name","info"] } } }

  • 1.2.精准查询

    • 介绍:不对用户内容进行分词,直接精确匹配,一般查找keyword、数值、日期、布尔等类型

    • ids
      GET /items/_search { "query":{ "ids":{ "values":["1","2","3"] } } }

    • range
      GET /items/_search { "query":{ "range":{ "price":{ "gte":10, "lte":20 } } } }

    • term
      GET /items/_search { "query":{ "term":{ "name":{ "value":"脱脂牛奶" } } } }

  • 1.3.地理查询

    • 介绍:用于搜索地理位置,搜索方式较多

    • 常见用法:geo_distance、geo_bounding_box等


2.复合查询

  • 介绍:以逻辑方式组合多个叶子或者更改叶子查询的行为方式

  • 2.1.bool(布尔查询)

    • 介绍:基于逻辑运算组合叶子查询,实现组合条件
    示例代码
    GET /items/_search
    {
    "query":{
        "bool":{
            "must":[
                {"match": {"name" : "手机"}}
            ],
            "should":[
                {"term": {"brand" : {"value" : "vivo"} } },
                {"term": {"brand" : {"value" : "小米"} } }
            ],
            "must_not":[
                {"range": {"price" : {"gte" : 2500} } }
            ],
            "filter":[
                {"range": {"price" : {"lte" : 1000} } }
            ]
        }
    }
    }
    
  • 2.2.相关性算法

    • 介绍:基于逻辑运算组合叶子查询,实现组合条件

    • 常见用法:function_score、dis_max等


3.排序分页

  • 3.1.排序

    • 介绍:es支持对搜索结果排序,默认根据相关度算分(_score)来排序,也可以指定排序字段。可排序的字段类型有:keyword、数值、地理坐标、日期。
    示例代码
        GET /items/_search
    {
        "query": {
            "match_all":{}
        },
        "sort": [
            {
                "sold" : "desc"
            },
            {
                "price" : "asc"
            }
        ]
    }
    
  • 3.2.分页

    • 介绍:es默认情况下只返回top10的数据,如果要查询更多数据就需要修改分页参数,es中通过修改from、size参数来控制要返回的分页结果。
    示例代码
    GET /items/_search
    {
        "query": {
            "match_all":{}
        },
        "from": 0,
        "size": 10,
        "sort": [
            {
                "price" : "asc"
            }
        ]
    }
    

4.高亮显示

  • 介绍:高亮显示就是在搜索结果中把搜索关键字突出显示

    示例代码
    GET /items/_search
    {
        "query": {
            "match":{
                "name" : "脱脂牛奶"
            }
        },
        "highlight": {
            "fields" : {
                "name" : {
                    "pre_tags" : "<em>"
                    "post_tags" : "</em>"
                }
            }
        }
    }
    
  • 注意:不需要指定标签,默认标签就是


5.聚合

  • 介绍:聚合可以实现对文档数据的统计、分析、运算

  • 5.1.桶聚合

    • 介绍:用来对文档进行分组

    • 5.1.1.TermAggregation:按照文档字段值分组

    • 代码示例

    • 5.1.2.Date Histogram:按照日期阶梯分组,如一周为一组、一个月为一组

  • 5.2.度量聚合

    • 介绍:用以计算一些值,如最大最小值、平均值

    • 常见用法:Avg、Max、Min、Stas

  • 5.3.管道聚合

    • 介绍:以其他聚合的结果为基础做聚合

    • 代码示例

posted on 2025-03-09 20:19  Chihirooo  阅读(24)  评论(0)    收藏  举报

导航