Yhzhtk's Blog

(热爱技术,高效Code)     归档  标签  源码  关于 


深入搜索引擎原理

2018-01-07  查看评论    搜索引擎  原理  Lucene 

之前几段工作经历都与搜索有关,现在也有业务在用搜索,对搜索引擎做一个原理性的分享,包括搜索的一系列核心数据结构和算法,尽量覆盖搜索引擎的核心原理,但不涉及数据挖掘、NLP等。文章有点长,多多指点~~

一、搜索引擎引题

搜索引擎是什么?

这里有个概念需要提一下。信息检索 (Information Retrieval 简称 IR) 和 搜索 (Search) 是有区别的,信息检索是一门学科,研究信息的获取、表示、存储、组织和访问,而搜索只是信息检索的一个分支,其他的如问答系统、信息抽取、信息过滤也可以是信息检索。

本文要讲的搜索引擎,是通常意义上的全文搜索引擎、垂直搜索引擎的普遍原理,比如 Google、Baidu,天猫搜索商品、口碑搜索美食、飞猪搜索酒店等。

Lucene 是非常出名且高效的全文检索工具包,ES 和 Solr 底层都是使用的 Lucene,本文的大部分原理和算法都会以 Lucene 来举例介绍。

为什么需要搜索引擎?

看一个实际的例子:如何从一个亿级数据的商品表里,寻找名字含“秋裤”的 商品。

使用SQL Like

select * from item where name like '%秋裤%'

阅读全文


笔记迁移到 note 下的 issue

2015-08-10  查看评论    笔记迁移  note  issue 

从简原则,如果是一些小笔记的话,会在 note 项目下的 issue 上面写,支持Markdown,也可以有评论。

https://github.com/Yhzhtk/note/issues

多谢关注!

阅读全文


一图学习 Spring事务传播性

2014-06-17  查看评论    思维导图  事务 

事务是数据库操作原子性的最基本手段,而事务的传播级别和数据隔离级别,是事务控制的两个主要特性。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。上篇文章主要分析了隔离级别的问题,这篇文章看看事务的传播性。主要以Spring中的事务传播性来说明。

Spring事务传播性有七种,REQUIRED、SUPPORTS、REQUIRES-NEW、NOT-SUPPORTED、MANDATORY、NEVER、NESTED。画了一个思维导图,以图学习各个传播级别的区别和特点吧。

事务传播性思维导图

阅读全文


数据库并发不一致分析

数据库的并发操作时,很可能会出现不一致的问题,包括丢失的修改,读脏数据,不可重复读,幻影读等,这些可以通过最原始的共享锁和排他锁解决,但是使用锁复杂繁琐,便产生了隔离级别,针对具体的业务流程使用不同的隔离级别,从而解决并发不一致的问题。

并发不一致问题

多个对象同时进行数据库操作时,由于先后顺序、读写操作、读写内容的各种组合,可能会出现丢失的修改、读脏数据、不可重复读、幻影读四种不一致的情况。以下描述中A、B表示两个线程中的操作对象:

  • 丢失的修改:A、B读完后,都修改后写入。那么最终的结果是后一个修改的,而前一个修改被覆盖丢失了。
  • 读脏数据:A读取到了B未提交的数据,当B回滚撤销时,A读到的数据就是错误的脏数据了。
  • 不可重复读:A读数据后,B对数据进行了修改,A再读取时,就发现数据不一致了。
  • 幻影读:A读取数据后,B又新增了一条记录,A再读时,发现多了一条,好像出现了幻觉一样。

阅读全文


一句话总结设计模式

2014-06-13  查看评论    设计模式 

复习了一下设计模式,发现有些没用过,没理解,还是不熟悉,翻看一遍,用一句话总结一下,希望能加深记忆,在使用中不断理解。

设计模式三个大类:

  1. 创造型设计模式:创造,就是产生一个新对象。
  2. 结构型设计模式:结构,注重设计架构,一些可直接参考的结构体系,可理解为整体模型。
  3. 行为型设计模式:行为,是动态的,注重调用、改变等动作。

阅读全文



©2013 首页   关于     View me on GitHub Powered by Jekyll & Bootstrap 知识共享许可协议