IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 之前不了解的搜索引擎 -> 正文阅读

[大数据]之前不了解的搜索引擎

? 之前天真的以为,会了es的全部API,就是搜索引擎工程师。

? 可是会了这些api,只能搬砖。

? 想要更加有深度的学习搜索推荐,于是向下进行延伸知识点。想去真正的了解搜索引擎,想要淌一下水有多深!

什么是搜索? ——?从形式上来说说什么是搜索

? ?这个框叫做搜索。这是浏览器类型的搜索。

? ?这个也叫搜索,这是电商类的搜索。

??

? ?不管是哪种类型的搜索,形式都一样。在框中输入你关心的内容,然后点搜索,返回和你关心相关的内容。

??

?搜索的几个核心需求

  1. ?搜索速度。
  2. ?搜索内容相关度高。用白话说就是:搜的是我想要的。

? 看起来需求很少,很简单。可就是这两个需求,一个稍微大点的公司,可能得几十个人来维护这个小小的搜索框。

? 搜索速度,关系到了数据结构,关系到了搜索集群规模。

? 搜索内容相关度高。这个是最难的,涉及到了非常多的算法。涉及到了自然语言处理、涉及到了且此、涉及到了相关性计算排序?等等

先说一下elasticsearch?和?lucene的关系

? 提到搜索,应该多数人想到的是elasticsearch。利用elasticsearch来搭建搜索集群。elasticsearch是可以满足我们的搜索需求。但是实际上对数据的操作,核心处理,并不是它。而是?Lucene,另外一个开源的技术,由java语言编写的文本搜索函数库。而es的核心功能就是基于lucene做的。

? 这里我暂时把lucene理解成?linux内核,而elasticsearch相当于是?centos或者?Ubuntu。其实不难理解,说起linux,大家很少提内核。更多的是想到centos这样的可直接使用的系统。同样的道理,提到搜索引擎,大家想到的是elasticsearch。

? 即使没写核心的搜索算法,但是elasticsearch依然是非常出色的产品。在lucene这个搜索函数库上做了非常多的工作,以至于光芒掩盖了lucene。给我们提供了分布式管理,使它作为搜索引擎,更加具备扩展性,这点我们可以描述为集群管理。为我们提供可视化展示界面(kibana),为我们提供了一整套数据处理方案。

? 如果你能把elasticsearch原理搞得很清楚的话,今后在公司搞分布式应用,应该是手到擒来的事情。es给我们提供了非常好的分布式架构经验。我们可以学习一下es是如何解决分布式问题的。

好好使用elasticsearch

? 满足上边提到的搜索框的需求,好好学学?elasticsearch的API差不多够了。但是想要做到更加极致,在现有的基础上,还想有更加明显的提升。有两步,第一步是合理使用elasticsearch,合理规划集群,合理分配分片,合理配置机器资源。第二步应该去关注底层的存储原理了。还是建议有深度的学习一下?lucene这个核心搜索函数库。

一次搜索过程

? 一次搜索过程,实际上有以下几个过程

  1. 搜索内容纠错以及搜索提示。搜索提示是一种系统更加友好的体现。而纠错则是系统更加智能的体现。
  2. 分词。前一个步骤保证了用户的输入内容没有问题。在没有问题的基础上,搜索出来的内容才有可能是用户关心的。而分词,则是对用户输入的内容进行分割,然后用户在搜索引擎中检索,找到与之相关度最高的内容。仅仅是一个分词,就有非常多的问题要考虑。比如语言问题,英语和中文的分词就不一样。英文通过空格分割就可以了,而中文却不能简单的根据标点符号分割。这又涉及到了自然语言处理。分词不准确,就像目标歪了,很难搜索到内容。想要把分词做的足够好,就要研究分词算法。特别是在中文情况下,经过语义分析,能提高分词的准确性。这又涉及到了自然语言处理。?关于分词,我们要考虑的是如何选择合适的分词器,来应对我们的场景,真的去研究算法,自研分词器,会有很大的困难。
  3. 关键词匹配。或者说是关键词检索。从存储引擎中搜索到和用户输入的关键词相关的文章。这一步就是要匹配大到与之相关的内容。这就涉及到了如何存储内容,例如使用倒排索引。
  4. 搜索排序。通常情况下,根据某些条件搜索。得到的结果又很多,真正能展示的内容却有限。这时候,如何从结果中拿到最好的结果,相关度最高的结果,就要对搜索结果进行排序。这个向下研究的话,有搜索模型,例如:布尔检索模型、向量空间检索模型、概率论检索模型等等。选择合适的模型来解决实际的问题。才能有更好的效果。

关于分词器

先说以下分词器如何工作

分词器是专门处理分词的组件,分词器由以下三部分组成:

  • Character Filters:针对原始文本处理,比如去除 html 标签
  • Tokenizer:按照规则切分为单词,比如按照空格切分
  • Token Filters:将切分的单词进行加工,比如大写转小写,删除 stopwords,增加同义语

lucene支持的分词器??

? 标准分词器:就是一个字一个字的。输入?中国的城市 ,?然后每各字当做一个词。?很鸡肋

? 空格分词器:针对输入的内容,就按照空格给你分割。这很适用于英文。

? 简单分词器:根据符号来分割。粒度太大了。很容易出现搜不出来结果的情况。

? 二分分词器:这个也是很笨的分词方法,没有算法在里边。会造成很多的冗余。例如:输入?中国的城市,?分词结果就是:?中国 |?国的|?的城|?城市 。?

? 停用分词器

? 中文智能分词器:这个分词结果基本上是我们想要的了。

ES支持的分词器

es分词器?参考文章

?IK分词器加上自定义分词词库,就比较不错的解决方案。另外可以看看阿里达摩院的基于?NLP的分词器叫做?AliNLP

周末读了一本书《从lucene到Elasticsearch全文检索实战》

? 这本书,就是入门级别的,如果英文水平不错的话,读官方文档更好一点。这就像一本一个翻译过来的es文档。没太大的作用。就是告诉你有哪些api,背后原理是什么,是没有的。如果想拿这本书拔高的话,这里劝退吧。

? 在我看来最优价值的是第一章,对信息检索模型的认知。告诉我们相关的搜索算法。


? 普通就像一道光,晴天下,不会引起任何人的注意。可是拿到黎明前的至黑至暗时刻,却又是那样的神圣。抓住这道普通的光,在至黑至暗的生活中凿开一个洞!

? 如果你就是觉得做的事情是平凡的,如果更加有深度的去研究一下呢?是不是就不平凡了?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:07:06  更:2021-08-30 12:07:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:07:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码