zoukankan      html  css  js  c++  java
  • ElasticSearch ---- 查询

    模拟数据创建

    首先利用head差检查创建book索引

    然后修改mappings配置

    http方法:  post

    链接地址:  http://192.168.253.129:9200/ book/novel/_mappings

    {

      "novel": {

        "properties": {

          "word_count": {

            "type": "integer"

          },

          "author": {

            "type": "keyword"

          },

          "title": {

            "type": "text"

          },

          "publish_date": {

            "type": "date",

            "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"

          }

        }

      }

    }

    数据插入

    第一条数据

    http方法: put

    连接地址: http://192.168.253.129:9200/book/novel/1

    请求参数

    {

      "author": "张三",

      "title": "移魂大法",

      "word_count": 1000,

      "publish_date": "2000-10-01"

    }

    {

      "author": "李三",

      "title": "JAVA入门",

      "word_count": 2000,

      "publish_date": "2010-10-01"

    }

    {

      "author": "张四",

      "title": "Python入门",

      "word_count": 2000,

      "publish_date": "2005-10-01"

    }

    {

      "author": "李四",

      "title": "Elasticsearch大法好",

      "word_count": 1000,

      "publish_date": "2017-08-01"

    }

    {

      "author": "王五",

      "title": "菜谱",

      "word_count": 5000,

      "publish_date": "2002-10-01"

    }

    {

      "author": "赵六",

      "title": "剑谱",

      "word_count": 10000,

      "publish_date": "1997-01-01"

    }

    {

      "author": "张三丰",

      "title": "太极拳",

      "word_count": 1000,

      "publish_date": "1997-01-01"

    }

    {

      "author": "瓦力",

      "title": "Elasticsearch入门",

      "word_count": 3000,

      "publish_date": "2017-08-20"

    }

    {

      "author": "很胖的瓦力",

      "title": "Elasticsearch精通",

      "word_count": 3000,

      "publish_date": "2017-08-15"

    }

    {

      "author": "牛魔王",

      "title": "芭蕉扇",

      "word_count": 1000,

      "publish_date": "2000-10-01"

    }

    {

      "author": "孙悟空",

      "title": "七十二变",

      "word_count": 1000,

      "publish_date": "2000-10-01"

    }

    2.2.4.1 简单查询

    http方法: GET

    http地址: http://192.168.253.129:9200/book/novel/1

    book: 索引名称

    novel: type名称

    1: 文档id

    2.2.4.2 条件查询

    http方法: POST

    http地址: http://192.168.253.129:9200/book/novel/_search

    查询所有数据

    {

        "query": {

            "match_all": {}

        }

    }

    Query: 为查询关键字

    添加起始条数和记录数

    {

      "query": {

        "match_all": {}

      },

      "from": 1,

      "size": 1

    }

    关键词查询

    {

      "query": {

        "match": {

          "title": "Elasticsearch"

        }

      },

      "sort": [

        {

          "publish_date": {

            "order": "desc"

          }

        }

      ]

    }

    Match中为匹配的字段和值

    Sort中为排序字段

    2.2.4.3 聚合查询

    关键词:aggs

    http方法: POST

    http地址: http://192.168.253.129:9200/book/novel/_search

    {

      "aggs": {

        "group_by_word_count": {

          "terms": {

            "field": "word_count"

          }

        },

        "group_by_publish_date": {

          "terms": {

            "field": "publish_date"

          }

        }

      }

    }

    对指定的字段进行计算

    {

      "aggs": {

        "grades_word_count": {

          "stats": {

            "field": "word_count"

          }

        }

      }

    }

    2.2.5> 高级查询

    2.2.5.1子条件查询-- Query context

    特定字段查询所指特定值

    Query context

    在查询过程中, 除了判断文档是否满足查询条件之外, ES还会计算一个_score来标识匹配的程度, 旨在判断目标文档和查询条件匹配的有多好.

    Query context常用的查询有全文本查询字段级别的查询

    1. 全文本查询: 针对文本类型数据
    1) 模糊匹配

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), match(模糊匹配关键词)

    请求参数:

    {

      "query": {

        "match": {

          "author": "瓦力"

        }

      }

    }

    或者

    {

      "query": {

        "match": {

          "title": "elasticsearch入门"

        }

      }

    }

    模糊匹配会把查询的字段进行拆分, 如title中的”elasticsearch入门”, 会查询”elasticsearch”和”入门”两个词语所匹配的内容

    2) 习语匹配

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), match_phrase(习语匹配关键词)

    请求参数:

    {

      "query": {

        "match_phrase": {

          "title": "elasticsearch入门"

        }

      }

    }

    该查询条件会将”title”字段中与”elasticsearch入门”相匹配的查出来

    3) 多个字段的匹配查询

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), muti_match(多字段匹配关键词)

    请求参数:

    {

      "query": {

        "multi_match": {

          "query": "瓦力",

          "fields": [

            "author",

            "title"

          ]

        }

      }

    }

    该查询条件会将”author”或者是”title”字段中包含”瓦力”的都查询出来

    4) 语法查询(queryString)

    支持通配符, 范围查询, 布尔查询, 也可以用在正则表达式中,

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), query_string(语法查询关键词)

    请求参数

    查询” elasticsearch”和” 大法”关键词

    {

      "query": {

        "query_string": {

          "query": "elasticsearch AND 大法"

        }

      }

    }

    关键词OR的使用

    {

      "query": {

        "query_string": {

          "query": "(elasticsearch AND 大法) OR Python"

        }

      }

    }

    指定字段和条件查询

    {

      "query": {

        "query_string": {

          "query": "瓦力 OR Elasticsearch",

          "fields": [

            "author",

            "title"

          ]

        }

      }

    }

    2. 字段级别的查询: 针对结构化数据, 如数字, 日期等.

    结构化数据的查询

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), term(具体项关键词)

    查询单词数”word_count”为1000的数据

    {

      "query": {

        "term": {

          "word_count": 1000

        }

      }

    }

    查询字数范围在1000-2000之间的图书

    关键词: range, gte大于等于, lte小于等于

    {

      "query": {

        "range": {

          "word_count": {

            "gte": 1000,

            "lte": 2000

          }

        }

      }

    }

    查询出版日期是今年初到现在的书籍(now关键字代表现在时间)

    {

      "query": {

        "range": {

          "publish_date": {

            "gte": "2017-01-01",

            "lte": "now"

          }

        }

      }

    }

    2.2.5.2 子条件查询--Filter context

    http方法: post

    http地址: http://192.168.253.129:9200/book/novel/_search

    关键词: query(查询关键词), bool, filter

    {

      "query": {

        "bool": {

          "filter": {

            "term": {

              "word_count": 1000

            }

          }

        }

      }

    }

    Filter context相对于query context, 用于数据过滤, es会对其查询结果缓存, 查询速率会更快一些, filter要结合bool一起使用.

    2.2.5.3 复合条件查询

    以一定的逻辑组合子条件查询

    固定分数查询

    http方法: post

    http地址: http://192.168.253.129:9200/_search (全文搜索)

    关键词: query(查询关键词), filter, boost关键词, 固定分数

    {

      "query": {

        "constant_score": {

          "filter": {

            "match": {

              "title": "elasticsearch"

            }

          },

          "boost": 2

        }

      }

    }

    固定了_score为2. 而在模糊查询中, _score为变化的

     

    布尔查询

    http方法: post

    http地址: http://192.168.253.129:9200/_search (全文搜索)

    关键词: query(查询关键词), bool, should(应该满足), must(必须满足), must_not(一定不能满足的条件)

    {

      "query": {

        "bool": {

          "should": [

            {

              "match": {

                "author": "瓦力"

              }

            },

            {

              "match": {

                "title": "elasticsearch"

              }

            }

          ]

        }

      }

    }

    {

      "query": {

        "bool": {

          "must": [

            {

              "match": {

                "author": "瓦力"

              }

            },

            {

              "match": {

                "title": "elasticsearch"

              }

            }

          ]

        }

      }

    }

    Bool和filter混合使用

    {

      "query": {

        "bool": {

          "must": [

            {

              "match": {

                "author": "瓦力"

              }

            },

            {

              "match": {

                "title": "elasticsearch"

              }

            }

          ],

          "filter": [

            {

              "term": {

                "word_count": 3000

              }

            }

          ]

        }

      }

    }

    Must_not的使用

    {

      "query": {

        "bool": {

          "must_not": {

            "term": {

              "author": "瓦力"

            }

          }

        }

      }

    }

  • 相关阅读:
    java内置数据类型
    docker安装及配置
    redis持久化
    golang linux安装
    TCP/IP协议
    php高并发,大流量
    C语言阐述进程和线程的区别
    python 消息队列-rabbitMQ 和 redis介绍使用
    python 新手题目-文件读写-关键字判断
    python IO模式(多路复用和异步IO深入理解)
  • 原文地址:https://www.cnblogs.com/rodge-run/p/7760342.html
Copyright © 2011-2022 走看看