不要失去信心,只要坚持不懈,就终会有成果的。
ElasticSearch REST API 操作:
GET 获取所请求的对象状态
POST改变当前对象状态
PUT 创建对象
DELETE 销毁对象
概念:
索引(相当数据库,包含行(代表文档)和列(字段)的表)、副本(用于控制查询性能及数据故障)、分片(每个分片就是一个Lucene索引)
通用属性:
index_name:该属性存储在索引中字段的名称,不指定默认为字段定义的对象名称
index:该属性取值为analyzed或no,字符串也可以设置成not_analyzed,设置analyzed该字段被索引,可以被搜索,设置no该字段不能被搜索,字符串设置为not_analyzed该字段可以被搜索但是不分析,只能原样搜索。
store:取值为no或yes,标注该字段是否存储原始值,即使没有指定原始值也可以通过_source返回
boost:默认1,表示该字段在文档中的重要性,分数越高越重要
null_value:表示该字段在文档中不存在时应写入何值
include_in_all:该属性指定某字段是否包含到_all字段中
字段类型:字符型、数值型、布尔型、二进制型、multi_field类型
分词器:内置分词器(eg:standard、simple、keyword等)、自定义分词器
模板:可应用到所有索引,存放到config/templates/目录下,模板之间可覆盖
路由:routing参数(put数据时指定)、_routing字段(定义字段指定,相比routing参数要慢一些)
别名:可以为一个索引或多个索引定义另一个名字,也支持过滤别名(支持filter指定数据用于别名)
过滤器支持缓存 _cache参数
搜索数据:简单查询、复合查询、排序、支持调用脚本config/scripts目录下
支持数据类型:对象、数组、高亮、处理文件、自动补全、地址位置
简单查询:
#通过URI请求查询
GET /library/book/_search?q=title:crime&pretty=true
#term 查询 term查询不被解析,只能精确查询,可以指定多个索引、多个类型
代码语言:javascript复制GET /library/book/_search?pretty=ture ' -d '
{
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
}
#分页和结果规模
代码语言:javascript复制GET /library/_search?pretty=true '-d'
{
"from": 0,
"size": 3,
"query": {
"term": {
"title": {
"value": "the"
}
}
}
}
#返回版本号
代码语言:javascript复制GET /library/_search?pretty=true '-d'
{
"version": true,
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
}
#限制结果分数,添加min_score设置最小分数,高于0.60的文档
代码语言:javascript复制GET /library/_search?pretty=true '-d'
{
"min_score":0.60,
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
}
#指定搜索位置
代码语言:javascript复制GET /library/_search?preference=_local
{
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
}
#term查询 不被解析,匹配精确的词项,指定boost属性查询权重10倍
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"term": {
"title": {
"value": "crime",
"boost": 10
}
}
}
}
#terms查询,minimum属性设置为1,至少匹配一个词项,为2需同时包含2个词项
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"terms": {
"tags": [
"novel",
"book"
]
}
}
}
#match查询,提取查询参数中给定的值,分析这些值,匹配包含crime and 或punishment的所有文档
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"match": {
"title": "Crime and punishment"
}
}
}
#布尔match查询
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"match": {
"title":{
"query": "crime and punishment"
, "operator": "and"
}
}
}
}
#match_phrase 查询,与布尔区别是构造一个短语查询,slop查询短语中间隔几个未知单词算匹配成功
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"match_phrase": {
"title": {
"query": "crime and punishment",
"slop": 12
}
}
}
}
#match_phrase_prefix
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "crime and punishment",
"slop": 1,
"max_expansions": 10
}
}
}
}
#multi_macth查询,查询作用到多个字段上
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"multi_match": {
"query": "crime and punishment",
"fields": ["title","otitle"]
}
}
}
#query_string查询,支持lucene所有查询语法
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"query_string": {
"default_field": "title",
"query": "title:crime^10 title:punishment -otitle:cat"
}
}
}
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"query_string": {
"fields": ["title","otitle"],
"query": "crime punishment",
"use_dis_max": true
}
}
}
#ids 查询
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"ids": {
"values": ["10","11","12"]
}
}
}
#prefix 查询,类似于term查询,类似与多term查询
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"prefix": {
"title": {
"value": "cri"
}
}
}
}
#fuzz 查询基于模糊串,计算给定词项与文档的编辑距离来得到结果,该类查询对CPU资源消耗是昂贵的,对模糊匹配场景很实用
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"fuzzy": {
"title": "cirme"
}
}
}
#match_all 查询匹配索引中所有文档的简单查询
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"match_all": {}
}
}
#wildcard查询允许使用*和?通配符
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"wildcard": {
"title": {
"value": "cr*e"
}
}
}
}
#range 查询
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"range": {
"year": {
"gte": 1700,
"lte": 1900
}
}
}
}
##########过滤器(不影响打分)#####
#range过滤器
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"range": {
"year": {
"gte": 1930,
"lte": 1990
}
}
}
}
#exists过滤器 有指定字段的文档
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"exists": {
"field": "year"
}
}
}
#script过滤器(error)
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"script": {
"script":"now - doc['year'].value >100"
, "params": {
"now":2019
}
}
}
}
#limit过滤器,限制每个分片返回文档数目(error)
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"limit": {
"value": 1
}
}
}
#ids过滤器 得到标识符为2个文档
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"ids": {
"type": ["book"],
"values": [
"2"
]
}
}
}
#过滤器组合 bool、and、or和not过滤器(error,重点在搞一下)
代码语言:javascript复制GET library/_search?pretty
{
"post_filter": {
"not": {
"and":[{
"term":{
"title":"crime"
}
},
{
"or":[
{
"range":{
"year": {
"gte": 1930,
"lte": 1990
}
}
},{
"term":{
"available":true
}
}
]
}]
}
}
}
############组合查询############
#bool查询
#should 可以匹配也可以不匹配
#must 必须在返回的文档上匹配上
#must_not 不能在返回的文档上匹配上
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"bool": {
"must": [
{"term": {
"title": {
"value": "crime"
}
}}
],
"should": [
{
"range": {
"year": {
"gte": 1900,
"lte": 2000
}
}
}
],
"must_not": [
{
"term": {
"otitle": {
"value": "nothing"
}
}
}
]
}
}
}
#constant_score 查询,该查询用于封装另一个查询(过滤器),返回的每个文档都得到一个恒定值
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"constant_score": {
"query": {
"term": {
"title": {
"value": "crime"
}
}
},
"boost": 1.2
}
}
}
#indices查询,支持在多个索引中查询
##########数据排序##########
#默认排序
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"terms": {
"title": [
"crime",
"front",
"punishment"
]
}
}
, "sort": [
{
"_score": {
"order": "asc"
}
}
]
}
#error
代码语言:javascript复制POST library/book/ '-d'
{
"title":{
"type":"multi_field",
"fields":{
"title":{"type":"text"},
"sort":{"type":"text","index":"not_analyzed"}
}
}
}
#高亮,默认<em></em>
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
, "highlight": {
"pre_tags": ["<b>"],
"post_tags": ["</b>"],
"fields": {
"title": {}
}
}
}
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"term": {
"title": {
"value": "crime"
}
}
}
, "highlight": {
"fields": {
"title": {"pre_tags": ["<b>"],"post_tags": ["</b>"]}
}
}
}
代码语言:javascript复制GET library/_search?pretty
{
"query": {
"constant_score": {
"filter": {
"query_string": {
"query": "available:false author:heller"
}
},
"boost": 5
}
}
}
代码语言:javascript复制GET /library/_search
{
"query": {
"match_all": {}
}
}
#添加属性字段
代码语言:javascript复制PUT /library/book/_mapping
{
"properties": {
"name":{"type": "text","store": true,"index": true}
}
}
#创建嵌套文档
代码语言:javascript复制PUT /library/book/_mapping
{
"properties": {
"variation":{
"type": "nested",
"properties": {
"size":{"type": "text","store": true,"index": true},
"color":{"type": "text","store": true,"index": true}
}
}
}
}
代码语言:javascript复制PUT /library/book/6
{
"title":"The Book",
"author":"Test author",
"name":" the Sorec ",
"variation":[
{"size":"xxl","color":"red"},
{"size":"xxxl","color":"green"}
]
}
代码语言:javascript复制GET /library/book/_search/
{
"query": {
"nested": {
"path": "variation",
"query": {
"bool": {
"must": [
{"term": {"variation.size": "xxl"}},
{"term": {"variation.color": "red"}}
]
}
}
}
}
}
有问题欢迎留言讨论。