• Elasticsearch常用查询


    es和mysql类比

    1、查询文档结构

    GET how2java/product/_mapping

    2.1、term查询 term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分 词库中去匹配内容。

    GET how2java/product/_search
    {
      "query": {
        "term": {
          "place.keyword": {
            "value": "江苏苏州"
          }
        }
      }
    }

    2.2、terms查询 terms和term的查询机制是一样,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找 到相应文档内容。

    terms是在针对一个字段包含多个值的时候使用。

    term:where place= 北京;

    terms:where place= 北京 or place= ?or place= ?

    GET how2java/product/_search
    {
      "query": {
        "terms": {
          "place.keyword": [
            "北京",
            "上海"
          ]
        }
      }
    }

     2.3、constants_score查询,不会将结果进行算分,并且查询结果有缓存,可以提高查询效率

    GET how2java/product/_search
    {
      "query": {
        "constant_score": {
          "filter": {
            "match": {
              "place": "北京"
            }
          }
        }
      }
    }

    3.1 match_all查询 查询全部内容,不指定任何查询条件。

    POST how2java/product/_search
    {
      "query": {
        "match_all": {}
      }
    }

    3.2 match查询  指定一个Field作为筛选的条件,采用and或者or的方式连接

    POST how2java/product/_search
    {
      "query": {
        "match": {
          "name": {
            "query": "中国 健康",
            "operator": "or"
          }
        }
      }
    }

    3.2.1 query_string查询 好像和match查询差不多

    GET how2java/product/_search
    {
      "query": {
        "query_string": {
          "default_field": "name",
          "query": "非常 AND 美丽"  //默认分隔符是OR
        }
      }
    }

    3.3 multi_match查询 multi_match针对多个field进行检索,多个field对应一个text。

    POST how2java/product/_search
    {
      "query": {
        "multi_match": {
          "query": "北京",
          "fields": ["name","category"]
        }
      }
    }

     3.4 match_phrase查询 将查询内容作为一个整体不分词

    GET how2java/product/_search
    {
      "query": {
        "match_phrase": {
          "name": "非常容易"
        }
      }
    }

    4.1 id查询 只能用get 其余查询可以是get也可以是post

    GET how2java/product/26469

    4.2 ids查询

    POST how2java/product/_search
    {
      "query": {
        "ids": {
          "values": [26469, 26470]
        }
      }
    }

    5 prefix查询 前缀查询,可以通过一个关键字去指定一个Field的前缀,从而查询到指定的文档。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

    POST how2java/product/_search
    {
      "query": {
        "prefix": {
          "place": {
            "value": "武"
          }
        }
      }
    }

    6 wildcard查询 通配查询,和MySQL中的like是一个套路,可以在查询时,在字符串中指定通配符*和占位符?(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

    POST how2java/product/_search
    {
      "query": {
        "wildcard": {
          "place.keyword": {
            "value": "江苏??"
          }
        }
      }
    }

    7 range查询 范围查询,只针对数值类型,对某一个Field进行大于或者小于的范围指 可以使用 gt:> gte:>= lt:< lte:<=

    POST how2java/product/_search
    {
      "query": {
        "range": {
          "price": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }

    8 regexp查询 正则查询,通过你编写的正则表达式去匹配内容。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)

    POST how2java/product/_search
    {
      "query": {
        "regexp": {
          "name":"包邮*"
        }
      }
    }

    9 delete-by-query 根据term,match等查询方式去删除大量的文档

    10.1 bool复合查询

     复合过滤器,将你的多个查询条件,以一定的逻辑组合在一起。

    must: 所有的条件,用must组合在一起,表示And的意思                           会进行相关度的算分

    must_not:将must_not中的条件,全部都不能匹配,标识Not的意思          不会进行相关度的算分

    should:所有的条件,用should组合在一起,表示Or的意思                       会进行相关度的算分

    POST how2java/product/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "term": {
                "place.keyword": {
                  "value": "上海"
                }
              }
            },
            {
              "term": {
                "place.keyword": {
                  "value": "北京"
                }
              }
            }
          ],
          "must_not": [
            {
              "range": {
                "price": {
                  "gte": 100,
                  "lte": 2000
                }
              }
            }
          ],
          "must": [
            {
              "match": {
                "name": "中国"
              }
            }
          ]
        }
      }
    }

    10.2 filter查询 也属于bool查询的一种 filter中的条件是AND的关系             不会进行相关度的算分

    query,根据你的查询条件,去计算文档的匹配度得到一个分数,并且根据分数进行排序,不会做 缓存的。

    filter,根据你的查询条件去查询文档,不去计算分数,而且filter会对经常被过滤的数据进行缓 存。

    POST how2java/product/_search
    {
      "query": {
        "bool": {
          "filter": [
            {
              "term":{
                "place.keyword":"北京"
              }
            },
            {
              "range": {
                "price": {
                  "lte": 10
                }
              }
            }
          ]
        }
      }
    }
  • 相关阅读:
    ECharts图形库
    python_flask 注册,登陆,退出思路 ---纯个人观点
    python基础-类的继承
    python基础-面向对象
    python基础-大杂烩
    python基础-异常处理
    python基础-文本操作
    python基础-模块
    python基础-函数
    python基础-字典
  • 原文地址:https://www.cnblogs.com/wscw/p/16311587.html
Copyright © 2020-2023  润新知