因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 这篇文章讲述了作者因为一个检索问题而学习了ElasticSearch技术,并分享了排查和解决ElasticSearch检索结果与页面展示不符的过程。

前言

在使用ElasticSearch构建检索条件,以及解析命中记录的过程中,发现命中商品的记录数和实际页面的展示不符合

正常情况下是一排展示四个商品数据,我现在是命中的商品记录数是20多个,但是是一页只展示了一个数据。
在这里插入图片描述

1、问题排查过程

当时并不清楚ElasticSearch 的具体使用,迫不得已转头回去学这个。

1.1 查看构建检索条件

在控制台上打印出构建的检索条件
在这里插入图片描述
格式化检索条件

{
    "from": 0,
    "size": 1,
    "query": {
        "bool": {
            "filter": [
                {
                    "terms": {
                        "brandId": [
                            1
                        ],
                        "boost": 1.0
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1.0
        }
    },
    "aggregations": {
        "brand_agg": {
            "terms": {
                "field": "brandId",
                "size": 50,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "brand_name_agg": {
                    "terms": {
                        "field": "brandName",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                },
                "brand_img_agg": {
                    "terms": {
                        "field": "brandImg",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                }
            }
        },
        "catalog_agg": {
            "terms": {
                "field": "catalogId",
                "size": 20,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "catalog_name_agg": {
                    "terms": {
                        "field": "catalogName",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                }
            }
        },
        "attr_agg": {
            "nested": {
                "path": "attrs"
            },
            "aggregations": {
                "attr_id_agg": {
                    "terms": {
                        "field": "attrs.attrId",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    },
                    "aggregations": {
                        "attr_name_agg": {
                            "terms": {
                                "field": "attrs.attrName",
                                "size": 1,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            }
                        },
                        "attr_value_agg": {
                            "terms": {
                                "field": "attrs.attrValue",
                                "size": 50,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

1.2 使用kibana 控制台工具查看

GET gulimall_product/_search
{
    "from": 0,
    "size": 1,
    "query": {
        "bool": {
            "filter": [
                {
                    "terms": {
                        "brandId": [
                            1
                        ],
                        "boost": 1.0
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1.0
        }
    },
    "aggregations": {
        "brand_agg": {
            "terms": {
                "field": "brandId",
                "size": 50,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "brand_name_agg": {
                    "terms": {
                        "field": "brandName",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                },
                "brand_img_agg": {
                    "terms": {
                        "field": "brandImg",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                }
            }
        },
        "catalog_agg": {
            "terms": {
                "field": "catalogId",
                "size": 20,
                "min_doc_count": 1,
                "shard_min_doc_count": 0,
                "show_term_doc_count_error": false,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            },
            "aggregations": {
                "catalog_name_agg": {
                    "terms": {
                        "field": "catalogName",
                        "size": 1,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                }
            }
        },
        "attr_agg": {
            "nested": {
                "path": "attrs"
            },
            "aggregations": {
                "attr_id_agg": {
                    "terms": {
                        "field": "attrs.attrId",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    },
                    "aggregations": {
                        "attr_name_agg": {
                            "terms": {
                                "field": "attrs.attrName",
                                "size": 1,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            }
                        },
                        "attr_value_agg": {
                            "terms": {
                                "field": "attrs.attrValue",
                                "size": 50,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [
                                    {
                                        "_count": "desc"
                                    },
                                    {
                                        "_key": "asc"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

查看命中的记录数
在这里插入图片描述

1.3 Debug模式

在对检索出来的数据进行处理的时候,放入商品信息列表的数据的确是一个。
在这里插入图片描述

2、问题解决

2.1 问题分析

我还是通过查看构建的检索条件中得知,这里的size是每页展示多少个数据。那我就在构建检索条件的时候放大这个每页展示的条数
在这里插入图片描述

2.2 实际效果

在这里插入图片描述

每页展示四条数据
在这里插入图片描述

每页展示16条数据

在这里插入图片描述

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
存储 自然语言处理 BI
|
3月前
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
235 5
|
2天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
2月前
|
存储 运维 监控
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
100 8
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
|
1月前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
43 6
|
1月前
|
API 索引
Elasticsearch实时搜索
【11月更文挑战第2天】
40 1
|
1月前
|
存储 索引
Elasticsearch分布式架构
【11月更文挑战第2天】
26 1
|
20天前
|
供应链 算法 安全
深度解析区块链技术的分布式共识机制
深度解析区块链技术的分布式共识机制
41 0
|
1月前
|
监控 算法 网络协议
|
2月前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
179 2