搜索与搜索引擎简述

86 阅读16分钟

搜索与搜索引擎简述

基础概念

搜索的发展史

  • FTP文件检索阶段
  • 分类目录导航阶段
  • 文本相关性检索阶段
  • 网页链接分析阶段
  • 用户意图识别阶段

搜索的数据形态

  • 结构化数据。通常存放在关系型数据库中,如Mysql
  • 非结构化数据。通常存放在非关系型数据库中,如MongoDB

搜索分类

  • 站内搜索
    • 是指在品牌独立站内部构建的一种搜索引擎
    • 允许用户在其网站内通过搜索框或其他方式输入关键词,从而快速查找并定位到所需的信息或产品
    • 站内搜索的主要目的是为了提高用户体验,帮助用户更便捷地找到他们在独立站内所需的产品和服务
  • 站外搜索
    • 也叫全网搜索,现在主流的搜索引擎基本上都是全网搜索

搜索的核心要求

  • 识别用户真正的需求
  • 找到匹配用户需求的数据
  • 识别数据来源的可靠性(可信源)

检索质量的评价指标

是指搜索返回的信息的质量评价指标

  • 召回率
    • 是指在一次返回的搜索结果中,与搜索关键词相关的文档占所有相关文档的比率
    • 是衡量检索结果的查全率,评价检索胸痛是否把该召回的文档都召回了
  • 精准率
    • 为本次搜索结果中相关文档所占的比例

正排索引和倒排索引

正排索引

  • 由Key查询实体的过程(例如Map集合),使用的正排索引
  • 时间复杂度为O(1)

倒排索引

  • 倒排索引通常由两部分组成
    • 单词词典,即每个文档进行分词后的词项在去重后组合成的集合
    • 倒排文件,是倒排列表持久化存储的结果,倒排列表记录了词项所在文档的文档列表、单词词频等信息
  • 时间复杂度为O(1)

示例

Map<key, text>,这就是是一个正排索引
例如:
{小王 : 提着苹果}
{小李 : 提着草莓}
{小刘 : 提着苹果和草莓}


通过对内容进行分词后的集合Map<key, List<item>>,这就是是一个分词后的正排索引
例如:
{小王 : {提着,苹果}}
{小李 : {提着,草莓}}
{小刘 : {提着,苹果,和,草莓}}


由检索词快速找到包含这个查询词的集合Map<item, List<Key>>,这就是一个分词后的倒排索引
例如:
{提着 : {小王,小李,小刘}}
{苹果: {小王,小刘}}
{草莓 : {小李,小刘}}
{和 : {小刘}}

分词器

简述

  • 分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具
  • 而把全文本转换成一系列单词(term/token)的过程,也叫分词

分词方式

  • 最小颗粒度的分词
  • 精准分词
  • 用户自定义词典优先策略的分词
  • 面向索引的分词
  • 带有新词发现功能的分词

数据索引化

  • 数据索引化指的是数据在写入搜索引擎的过程中,扫描文档中的每一个词项,结合分词器和词典对必要的词项建立倒排索引,同时指明该词项在文章中出现的次数和位置

全文检索

  • 全文检索的前提是待检索的数据已经索引化,当用户查询时能根据建立的倒排索引进行查找
  • 衡量全文检索系统的关键指标是全面、准确和快速
  • 特点
    • 只处理文本,不处理语义
    • 结果列表有相关度排序
    • 支持高亮显示结果数据
    • 原始的文本被切分为多个单词、短语或特殊标记后进行存储
    • 给定词与它的变体(近义词)会被折叠为一个词,每组词均被视为同一个词。例如:土豆和马铃薯

数据处理

简述

  • 数据清洗通常是数据处理的第一步,它需要在进行数据转换之前完成
  • 而数据转换可以在数据清洗之后或之前进行,根据实际需求来确定执行顺序

目的

  • 提高数据质量

    • 通过数据处理操作,可以消除数据中的错误、不一致性和重复性,从而提高数据质量
  • 确保数据可用性

    • 对数据进行处理,以确保数据在后续的建模、存储和可视化分析过程中是可用的,减少因数据问题导致的分析错误或者系统故障
  • 提高分析准确性

    • 数据处理可帮助剔除无关或错误的数据,从而减少分析偏差,提高分析结果的准确性
  • 优化数据存储

    • 通过去除不必要的字段和规范数据格式,我们可用减少数据存储空间的占用,提高数据存储和检索的效率
  • 降低数据同步错误

    • 对数据进行处理,可以减少数据同步过程中出现的错误,确保数据顺利传输至ES等目标系统
  • 它涉及从各种源头和渠道收集、整理、清洗、分析和挖掘结构化和非结构化数据的过程

场景分析

数据采集

  • 数据采集,也称为数据获取,是指利用工具或技术从系统外部(各种源头和渠道)获取数据并将其输入到系统内部的过程
  • 这些数据源可能包括数据库、API、网页、传感器、日志文件等
  • 数据采集是数据科学的重要环节,为后续的数据分析、数据挖掘和数据可视化提供基础数据

数据清洗(降噪)

  • 主要目的是删除重复或无用数据,填充缺失值,纠正错误数据等,以确保数据的准确性和一致性
  • 处理数据中的异常值、重复值、缺失值、错误值等问题
  • 通常采用过滤、填充、纠错等方法来处理数据

数据转换/数据归类

  • 主要目的是将原始数据转换为更易于处理和分析的形式,以便更好地理解和利用数据,即将数据转换成适合进行数据挖掘或分析的形式
  • 处理数据格式、数据类型、数据单位、数据分布等问题
  • 通常采用转换、聚合、归一化、离散化等方法来将数据转换为更易于处理和分析的形式
  • 常见操作数据映射、数据格式化、数据校验和验证、数据聚合或分解、数据编码
  • 这个过程对于数据集成和数据管理等活动至关重要
  • 通过数据转换,组织能够确保不同系统和程序之间的数据兼容性和一致性
  • 在信息技术和数据处理领域中,数据转换不仅涉及数据的简单格式转换,还包括数据迁移、系统集成、数据仓库的建立及报告的生成

数据集成

  • 是指将来自不同来源、不同格式和不同结构的数据整合到一个统一的数据存储库中的过程
  • 目的是解决数据的分布性和异构性问题,提供全面的数据共享,并使用户能够以统一透明的方式访问数据
  • 这个过程包括数据采集、转换和存储,主要目标是消除数据孤岛,提高数据分析的精确度和速度,促进更好的数据管理和分析
  • 数据集成还涉及清理、排序、扩充等其他过程,以确保数据的可用性和一致性

数据存储

  • 数据通常需要存储以供将来使用。这可以是在关系型数据库、数据仓库、云存储或其他数据存储系统中

数据可视化

  • 数据可视化是通过图表、图形和仪表板将数据呈现为可理解的形式。它有助于传达数据见解和支持决策过程

数据分析

  • 包括统计分析、机器学习、数据挖掘等技术,以发现数据中的模式、关联和趋势。分析结果用于制定决策和解决问题

数据管理

  • 是指对数据生命周期进行的规划、执行和控制,目的是最大化数据的价值。 它涵盖了从数据采集、存储、处理到最终使用的全部过程,并且需要与公司业务目标紧密结合,服务于业务发展

Elastic Stack

简述

Elastic Stack由Logstash、Beats、Elasticsearch和Kibana四大核心产品组成

核心产品

Kibana

简述

  • Kibana是一个免费且开放的工具
  • 使用Kibana工具可以实现Elasticsearch数据可视化分析
  • Kibana作为用户界面的核心,集成了丰富的可视化工具、界面交互开发工具和管理工具
  • 可以定义各种维度的数据报表,用于支持技术人员进行开发、调试和运维工作

Logstash

简述

  • Logstash和Beats作为底层核心引擎,共同组成了数据摄取平台,可以实现数据标准化,使数据便于后续分析使用
  • 提供免费且开放的服务器端数据处理管道(pipeline),能够从多个不同的数据源采集数据、转换数据,然后将数据发送到存储库中(如:Elasticsearch、Mysql、Kafka、Redis等)
  • 通过Filter能够解析各个事件,通过自定义的规则对数据进行处理,以便对其进行更强大的分析并实现商业价值
  • Logstash支持logstash_input_jdbc、logstash_input_kafka、logstash_output_elasticsearch等200多个插件,提供了插件的可插拔框架,可以将不同类型的输入数据通过输入、过滤、输出这"三段论模板"进行灵活配置,以满足不同业务场景的需求

Beats

简述

  • Beats是一个免费且开放的平台
  • 集合了多种单一用途的数据采集器,使数据从成百上千的机器和系统向Logstash或者Elasticsearch发送
  • 提供了丰富的数据采集器,例如Filebeat(轻量型日志采集器)、Metricbeat(轻量型指标采集器)、Packetbeat(轻量型网络数据采集器)等

Elasticsearch

应用场景分析

全文检索

Elasticsearch支持各类应用、网站等的全文搜索

  • 应用场景
    • 淘宝、京东等电商平台的搜索
    • 360手机助手等应用市场平台的搜索
    • 以及腾讯文档等平台的全文检索服务

日志分析

使用Elasticsearch来快速分析和处理大量的日志数据,从而对业务运行状况进行实时的监控和故障排查

  • 应用场景
    • 用户行为日志、应用日志等业务日志
    • Debug、Info、WARN、ERROR、FATAL等不同等级的系统日志
    • 慢查询、异常探测等状态日志

商业智能

借助Elasticsearch的高效、实时的数据分析和可视化能力,通过提供商业智能系统,帮助企业更好地理解市场趋势、优化决策过程

  • 应用场景
    • 瑞思BI
    • 百度数据可视化Sugar BI
    • 永洪BI

其它

知识库检索系统设计

项目简述

项目背景

  • 在面对海量知识信息时,想要找到自己需要的信息,往往会有繁琐的过程。而通过对知识进行数字化归类归档建立管理与检索系统(知识库检索系统),我们可以通过该系统快速检索目标信息

项目目标

  • 我们将建立一个本地知识库检索系统,它能帮助用户更好的整理、检索和分析文档,并提升工作效率

业务分析

确立核心需求

  • 支持多种格式历史文档(pdf、ppt、doc、txt等)的解析以及索引化
  • 支持文档基础数据(标题、大小、发布时间、修改时间、作者、全文)的建模
  • 支持将建模后的数据存入ES中,并可以通过浏览器进行访问
  • 支持新写入文档数据的解析及索引化,可进行定时设置
  • 支持可视化分析
    • 为用户(运营人员、开发人员、数据分析师、运维人员等其它相关人员)提供直观的数据分析和展示
    • 例如:文档总量聚合图、文档分类聚合图、发布作者统计图、文献发布时间走势图

确立核心业务流程

  • 例如:
    • 上传业务
      • 步骤1
      • 步骤2
    • 文件解析业务
      • 步骤1
      • 步骤2

确立核心数据流

  1. 用户上传文件
  2. 对文件进行解析(原始数据)
  3. 对原始数据进行建模与存储(归档数据)
    • 提供检索与管理服务
  4. 定期定时对各类归档数据的进行统计
    • 提供报表与图表进行直观的可视化分析

技术分析

相关技术选型与调研

  • OpenOffice。是一款开源、免费的办公软件套装,提供了类似于微软Office的功能
  • Tika。是一款开源文件类型检测和内容提取库
  • Ingest Attachment。是一个针对ES的文件处理器插件
  • FSGrawler。用于文件系统检索、中文知识库构建,并简化PDF和Office等文档解析的繁琐步骤,实现一键导入构建索引以及检索等功能
  • Python Flask。是当今最受欢迎的Python Web框架之一

系统支撑技术栈

  • HTML。用于构建页面框架
  • CSS。用于美化页面样式
  • JavaScript。用于实现动态更新样式
  • Python。提供后端服务接口
  • Flask。用于搭建后端服务框架
  • Elasticsearch。作为数据存储方案
  • Kibana。用于实现数据可视化分析
  • FSCrawler。负责进行本地磁盘文档爬虫解析并写入ES

关键业务使用的技术说明

  • FSCrawler(文档爬虫工具),采集数据
  • ES对数据建模并存储
  • Kibana,从ES中获取数据,并提供可视化分析
  • Flask Web,建立站点
    • 从ES获取数据
    • 对外提供Web服务

项目演示

  • 界面演示
  • 交互演示
  • 数据展示,列表数据、统计数据、图表数据

大数据可视化系统设计

项目简述

项目背景

  • 在互联网中上,我们想要直观的了解某类信息的汇总数据,往往会有繁琐的收集过程
  • 而我们通过建立一个信息收集系统,并对收集的信息进行统计与分析,以帮助各利益相关方更直观的分析和理解这类信息的反馈

项目目标

  • 通过定制的收集策略,对互联网上相关数据的收集与清洗,并这类数据进行建模与归档,对外提供这些数据的可视化展示
  • 通过数据采集、清洗、建模和存储,我们整合了多个平台的多维度的数据,并在Kibana上设计了包括基于城市、省份、地区的数据可视化统计图、走势图、热点分布图等。该系统直观的呈现了各地区的数据反馈,有助于挖掘潜在的商业价值和改进空间
  • ES技术在大数据统计与可视化领域具有强大的应用价值

业务分析

确立核心需求

  • 数据收集
    • 数据从哪里来
    • 调查与评估数据源获取的数据可行性分析
  • 数据整合
    • 需要哪些字段?如何建模
    • 原始数据是否足够?需不需要清洗?如何清洗
  • 数据可视化
    • 如何实现可视化分析
    • 需要进行哪些维度的分析
    • 分析获取的数据内容是否满足可视化展示

确立业务流程

确立数据流

  • 数据采集
    • 解决数据源头问题,从各大互联网平台抓取数据,得到初始数据
  • 数据清洗
    • 对原始数据进行必要的特殊字符清洗处理,包括去重、填补缺失值和修正错误
    • 确保Logstash环节能同步
  • 数据同步,Logstash
    • 通过Logstash的输入、过滤、输出环节的协同处理,实现数据同步
    • 选择logstash_input_csv作为同步方案
  • 数据存储,ES
    • 基于建模实现数据落地存储至ES,便于检索、聚合和后续的可视化分析
  • 数据分析
    • 梳理可视化分析的维度(时间、点击数量、数据分布),并检查分析结果是否存在偏差
    • 如果存在偏差则需要调整建模,重新导入或迁移数据
  • 数据可视化,Kibana
    • 基于数据存储的特定维度,使用Kibana实现可视化分析

技术分析

相关技术选型与调研

系统支撑技术栈

关键业务使用的技术说明

项目演示

  • 界面演示
  • 交互演示
  • 数据展示

ELK日志系统分析

项目简述

项目背景

  • 在软件系统中,各类日志数据的不断累加,而日志中包含了各软件的运行状态信息,通过分析该日志数据,可以更加利于了解各系统的运行情况

项目目标

  • 通过建立日志分析系统,实现各系统的日志收集与日志数据的结构化解析、同步、存储、检索以及可视化分析的全流程管理
  • 借助该系统,我们可以实时监控和深入分析日志数据,包括总数据量、请求类型比例、数据趋势、IP统计、响应码统计等
  • 此外还提供了直接访问和查询原始日志数据的功能
  • 这种日志分析系统具有灵活的数据探索和故障排查能力,也能为我们的业务运营和决策提供有力支持,同时也能帮助工程师快速定位和解决问题

业务分析

确立核心需求

  • 日志收集
  • 日志分析
  • 日志存储
  • 日志可视化

确立业务流程

确立数据流

  • 原始数据
    • CSV文件
  • 数据采集
    • 使用Logstash数据处理工具,读取日志文件数据
  • 数据清洗
    • 通过Logstash的插件和过滤器对日志数据进行清洗、转换、增强,之后将结构化数据传输到ES
  • 数据存储
    • ES将结构化的数据进行建模和存储,并支持快速存储和检索能力
  • 数据可视化
    • 通过Kibana等可视化工具提供的丰富的图表和仪表盘,可以将日志数据中的关键信息及趋势直观呈现,帮助用户更好的监控和管理系统的允许状况

技术分析

相关技术选型与调研

  • 评估实现业务的最便捷的技术实现方式
  • 调研研发团队技术栈体系
  • 评估技术的社区活跃度、使用许可协议、技术与业务的适配度

系统模块使用的技术

关键业务使用的技术说明

项目演示

  • 界面演示
  • 交互演示
  • 数据展示