wordpress美化背景,杭州网络推广网络优化,做网页跳转网站,开发公司退房款代理词目录 1. Elasticsearch之常用DSL语句 
1.1 操作索引 
1.2 文档操作 
1.3 DSL查询 
1.4 搜索结果处理 
1.5 数据聚合 1. Elasticsearch之常用DSL语句 
1.1 操作索引 
mapping是对索引库中文档的约束#xff0c;常见的mapping属性包括#xff1a; 
- type#xff1a;字段数据类…目录 1. Elasticsearch之常用DSL语句 
1.1 操作索引 
1.2 文档操作 
1.3 DSL查询 
1.4 搜索结果处理 
1.5 数据聚合 1. Elasticsearch之常用DSL语句 
1.1 操作索引 
mapping是对索引库中文档的约束常见的mapping属性包括 
- type字段数据类型常见的简单类型有   - 字符串text可分词的文本、keyword精确值例如品牌、国家、ip地址   - 数值long、integer、short、byte、double、float、   - 布尔boolean   - 日期date   - 对象object - index是否创建索引默认为true - analyzer使用哪种分词器   
创建索引 
PUT /goods
{mappings: {properties: {brandName: {type: keyword},categoryName: {type: keyword},createTime: {type: date,format: yyyy-MM-dd HH:mm:ss},id: {type: keyword},price: {type: double},saleNum: {type: integer},status: {type: integer},stock: {type: integer},title: {type: text,analyzer: ik_max_word,}}}
} 
查询索引 
GET /goods 
修改索引库 
倒排索引结构虽然不复杂但是一旦数据结构改变比如改变了分词器就需要重新创建倒排索引这简直是灾难。因此索引库一旦创建无法修改mapping。 
虽然无法修改mapping中已有的字段但是却允许添加新的字段到mapping中因为不会对倒排索引产生影响。 
PUT /索引库名/_mapping
{properties: {新字段名:{type: integer}}
} 
删除索引库 
DELETE /goods 
1.2 文档操作 
新增文档 
POST /goods/_doc/1
{id: 1,brandName: Apple,categoryName: 手机,createTime: 2023-12-26 20:00:00,price: 8000,saleNum: 100,status: 0,stock: 100,title: Apple iPhone 15 Pro 256GB 远峰蓝色 支持移动联通电信5G 双卡双待手机
}POST /goods/_doc/2
{id: 2,brandName: Huawei,categoryName: 手机,createTime: 2023-12-26 20:00:00,price: 7000,saleNum: 400,status: 0,stock: 200,title: 华为 HUAWEI Mate 60 Pro 智能手机 鸿蒙系统卫星通话昆仑玻璃
} 
查询文档 
GET /goods/_doc/1//批量获取
GET goods/_doc/_mget
{ids:[1,2]
}删除文档 
DELETE /goods/_doc/1 
修改文档 
全量修改是覆盖原来的文档其本质是 
根据指定的id删除文档新增一个相同id的文档 
注意如果根据id删除时id不存在第二步的新增也会执行也就从修改变成了新增操作了。 
PUT /{索引库名}/_doc/文档id
{字段1: 值1,字段2: 值2,// ... 略
}增量修改是只修改指定id匹配的文档中的部分字段。 
POST /{索引库名}/_update/文档id
{doc: {字段名: 新的值,}
} 
1.3 DSL查询 
查询所有 
GET /goods/_search
{query: {match_all: {}}
} 
全文检索 
//单字段查询
GET /goods/_search
{query: {match: {title: 手机}}
}//多字段查询
GET /goods/_search
{query: {multi_match: {query: 手机,fields: [title]}}
} 
精准查询 
精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有 
- term根据词条精确值查询 - range根据值的范围查询 
term查询的字段是不分词的字段因此查询的条件也必须是不分词的词条。查询时用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多反而搜索不到数据。  
GET /goods/_search
{query: {term: {categoryName: {value: 手机}}}
}//匹配多个term
GET /goods/_search
{query: {terms: {categoryName: [手机,电脑]}}
} 
范围查询一般应用在对数值类型做范围过滤的时候。比如做价格范围过滤。 
GET /goods/_search
{query: {range: {price: {gte: 7500,lte: 9000}}}
} 
复合查询 
- must必须匹配的条件可以理解为“与” - should选择性匹配的条件可以理解为“或” - must_not必须不匹配的条件不参与打分 - filter必须匹配的条件不参与打分 
POST goods/_search
{query: {bool: {must: [{term: {brandName: {value: Apple}}}],should: [{term: {categoryName: {value: 手机}}}],filter: [{range: {stock: {gt: 0}}}]}}
} 
1.4 搜索结果处理 
普通字段排序 
GET /goods/_search
{query: {match_all: {}},sort: [{stock: desc  //asc升序}]
} 
分页 
elasticsearch中通过修改from、size参数来控制要返回的分页结果 
- from从第几个文档开始 - size总共查询几个文档 
GET /goods/_search
{query: {match_all: {}},from: 0,size: 1
} 
高亮显示 
POST goods/_search
{query: {match: {title: 手机}},highlight: {fields: {title: {pre_tags: [font colorred],post_tags: [/font]}}}
} 
1.5 数据聚合 
聚合常见的有三类 
- 桶Bucket聚合用来对文档做分组   - TermAggregation按照文档字段值分组例如按照品牌值分组、按照国家分组   - Date Histogram按照日期阶梯分组例如一周为一组或者一月为一组 
- 度量Metric聚合用以计算一些值比如最大值、最小值、平均值等   - Avg求平均值   - Max求最大值   - Min求最小值   - Stats同时求max、min、avg、sum等 - 管道pipeline聚合其它聚合的结果为基础做聚合 
统计所有数据中的品牌有几种按照品牌对数据分组。 
GET /goods/_search
{size: 0,  //设置size为0结果中不包含文档只包含聚合结果aggs: { // 定义聚合brandAgg: { //给聚合起个名字terms: { // 聚合的类型按照品牌值聚合所以选择termfield: brandName, // 参与聚合的字段size: 20 // 希望获取的聚合结果数量}}}
} 对于每个品牌的聚合限定聚合范围并且根据Bucket内的文档数量进行升序排序 
GET /goods/_search
{query: {range: {stock: {gte: 10}}}, size: 0,  //设置size为0结果中不包含文档只包含聚合结果aggs: { // 定义聚合brandAgg: { //给聚合起个名字terms: { // 聚合的类型按照品牌值聚合所以选择termfield: brandName, // 参与聚合的字段size: 20, // 希望获取的聚合结果数量order: {_count: asc}}}}
} 
按照品牌分组形成了一个个桶。对桶内的数据做运算获取每个品牌的stock的min、max、avg等值。 
GET /goods/_search
{query: {range: {stock: {gte: 10}}}, size: 0,  aggs: { brandAgg: {terms: {field: brandName, size: 20, order: {_count: asc}},aggs: {stock_status: {stats: {field: stock}}}}}
}