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": "瓦力"

        }

      }

    }

  }

}

原文地址:https://www.cnblogs.com/rodge-run/p/7760342.html