ElasticSearch Nested类型全文检索、聚合查询
2023-12-31 20:50:03
ElasticSearch Nested类型全文检索、聚合查询
Nested类型全文检索
- 创建索引
PUT /products1
{
"mappings": {
"properties": {
"fulltext": {
"type": "text"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"reviews": {
"type": "nested",
"properties": {
"rating": {
"type": "integer"
},
"author": {
"type": "text",
"copy_to": "fulltext"
},
"date": {
"type": "date"
}
}
}
}
}
}
以上创建索引语句中实现全文检索重点为"fulltext": { "type": "text" }
和"copy_to": "fulltext"
,nested类型中哪个text类型的字段需要全文检索,就在字段上加"copy_to": "fulltext"
- 添加数据
PUT /products1/_doc/1
{
"name": "Product A",
"reviews": [
{
"rating": 5,
"author": "Alice",
"date": "2021-01-01"
},
{
"rating": 4,
"author": "Bob",
"date": "2021-01-02"
}
]
}
PUT /products1/_doc/2
{
"name": "Product B",
"reviews": [
{
"rating": 1,
"author": "John",
"date": "2021-01-03"
},
{
"rating": 2,
"author": "Mary",
"date": "2021-01-04"
},
{
"rating": 3,
"author": "James",
"date": "2021-01-05"
},
{
"rating": 4,
"author": "Elisabeth",
"date": "2021-01-06"
},
{
"rating": 5,
"author": "Richard",
"date": "2021-01-07"
}
]
}
PUT /products1/_doc/3
{
"name": "Product C",
"reviews": [
{
"rating": 1,
"author": "Alex",
"date": "2021-01-03"
},
{
"rating": 2,
"author": "Alice",
"date": "2021-01-04"
}
]
}
- 执行查询
POST products1/_search
{
"query": {
"simple_query_string": {
"query": "Alice"
}
}
}
- 结果如下,可以看到nested类型中包含Alice的数据也被检索出来了
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.5442147,
"hits" : [
{
"_index" : "products1",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.5442147,
"_source" : {
"name" : "Product A",
"reviews" : [
{
"rating" : 5,
"author" : "Alice",
"date" : "2021-01-01"
},
{
"rating" : 4,
"author" : "Bob",
"date" : "2021-01-02"
}
]
}
},
{
"_index" : "products1",
"_type" : "_doc",
"_id" : "3",
"_score" : 0.5442147,
"_source" : {
"name" : "Product C",
"reviews" : [
{
"rating" : 1,
"author" : "Alex",
"date" : "2021-01-03"
},
{
"rating" : 2,
"author" : "Alice",
"date" : "2021-01-04"
}
]
}
}
]
}
}
以上可以看到实现nested类型全文检索
nested类型聚合查询
还是在上面product1索引中测试
- 现在,您可以对嵌套文档执行嵌套聚合。例如,让我们计算每个产品的平均评分:
GET /products1/_search
{
"size": 0,
"aggs": {
"聚合名称": {
"terms": {
"field": "name.keyword"
},
"aggs": {
"reviews": {
"nested": {
"path": "reviews"
},
"aggs": {
"average_rating": {
"avg": {
"field": "reviews.rating"
}
}
}
}
}
}
}
}
- 我们首先使用术语聚合为每个产品创建存储桶。然后,对于每个产品,我们运行嵌套聚合,以便我们可以访问嵌套文档的集合。最后,我们可以计算这些嵌套文档的指标聚合,在我们的示例中是平均评分
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"products" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Product A",
"doc_count" : 1,
"reviews" : {
"doc_count" : 2,
"average_rating" : {
"value" : 4.5
}
}
},
{
"key" : "Product B",
"doc_count" : 1,
"reviews" : {
"doc_count" : 5,
"average_rating" : {
"value" : 3.0
}
}
},
{
"key" : "Product C",
"doc_count" : 1,
"reviews" : {
"doc_count" : 2,
"average_rating" : {
"value" : 1.5
}
}
}
]
}
}
}
文章来源:https://blog.csdn.net/weixin_43207039/article/details/135318990
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!