Arganzheng's Blog

stay hungry, stay foolish

Reading搜索

需求 用户可以根据 isbn、作者和书名进行搜索。 相关搜索:相关搜索关键词 根据时间进行排序? 根据状态进行排序? 相似书籍(more like this) 智能提示 suggesters auto-complete completion suggester spell correction term suggester phrase suggster 2. 用户可以根据分类(tag)进行浏览,其实就是根据tag进行搜索 ...

ElasticSearch学习

业界流行的开源搜索框架 Lucene: Java. Just a library Sphinx: C++ Solr/SolrCloud: Java, uses Lucene internally for all its indexing and search. Netfix Digg ElasticSearch: Java, uses Lucene internally for all its indexing and search. Wikipedia StackOverflow GitHub ElasticSearch的核心概念...

ElasticSearch的mappings

在ES中,每个文档都会归属到一个类型下(type,事实上是index下。ES6.0之后废除type的概念)。这个类型相当于关系型数据库中的表结构。所以每个类型有类似于DB一样的schema定义,称之为mapping。mapping定义了type中的fields信息: datatype for each field,具体参见前面的文章ElasticSearch的数据类型。 how the field should be handled by ES 大部分情况下,我们是不需要对type进行自定义mapping的,但是在某些情况下我们需要自定义mapping: distinguish between full text string fields ...

ElasticSearch字段排序

需求 如果我们需要根据一个字段进行排序,如何支持呢? 像日期、价格这些数值型的(日期底层其实是转换为数值),排序其实是很自然也是很简单的。但是如果是字符串类型的字段呢?有几个问题需要考虑: 分词对排序的影响 大小写、单复数之类区别 字符串类型的字段一般都需要进行搜索的,那么需要对其进行Analyzed。但是Analyzed的结果就是将该字符串解析为分散的token(term)。这样子,ES就不知道到底是根据那个term来排序,事实上根据哪一个都是错的,应该是整个字符串。所以为了对字符串类型字段进行排序,需要保存整个字符串为一个term——也就是说保存一个not_analyzed string。同时为了保证该字段能够被搜索,还要保存该字符串anal...

ElasticSearch的数据类型

ES使用JSON作为数据交互格式,所以简单来说,JSON支持的数据类型,ES都支持。 1. core simple field types String: string Whole number: byte, short, integer, long Floating point: float, double Boolean: boolean Date: date ES对于没有定义mapping的未知字段会采用dynamic mapping进行类型猜测,并且将其加入到type mapping中。这个行为可以通过 dynamic 配置项进行控制。 true: Add new fields dynamically — the def...

ElasticSearch的Analyzer

Analyzer在构建索引的时候,还有分析查询字符串(query string)时候会用到。 Lucene的Analyzer是一个pineline的机制,由一个 Tokenizer + N个 TokenFilter 构成,N>=0。Tokenizer之前还可以配置N个 CharFilter。 其中各个部件的职责如下: character filters Character filters are used to preprocess the string of characters before it is passed to the tokenizer. A character filter may be used to strip out HTML...

如何提高服务器并发处理能力

说明 以下内容为入门级介绍,意在对老技术作较全的总结而不是较深的研究。主要参考《构建高性能Web站点》一书。 目录 什么是服务器并发处理能力 怎样衡量服务器并发处理能力 吞吐率 压力测试 怎么提高服务器的并发处理能力 提高CPU并发计算能力 多进程 & 多线程 减少进程切换,使用线程,考虑进程绑定CPU 减少使用不必要的锁,考虑无锁编程 考虑进程优先级 关注系统负载 关注CPU使用率,除了用户空间和内核空间的CPU使用率以外,还要关...

select、poll和epoll简介

说明:本篇文章是网上各种资料杂烩而成。如有雷同,纯属自然。 select select功能介绍 select系统调用的功能是对多个文件描述符进行监视,当有文件描述符的文件读写操作完成,发生异常或者超时,该调用会返回这些文件描述符。 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds,struct timeval *timeout); select关键结构体 这里先介绍一些关键的结构体: typedef struct { unsigned long *in, *out, *ex; unsigned long *res_in, *res_out,...

静态资源服务器迁移MFS方案

背景 目前的静态资源以普通Linux文件系统(Ext3)的方式存放在05机器上,主要是图片和新闻(以及新闻附带的图片)。每半个小时更新一次。通过rsync + cron 脚本定时同步到01。01只是备份,不提供服务。随着静态资源的增加,静态服务器的压力比较大,而且读写服务是单点,虽然有冗余容灾,但是不能同时提供服务,不具有线性拓展性。一般来说海量的文件系统都需要使用分布式文件系统。具体参见海量图片存储思考。 目前的文件数量有1000w左右,基本都是图片和HTML文件。 关于MFS MFS是Moose File System的简称,与我们熟悉的fat,ntfs,ext3一样是一种文件系统(驼鹿文件系统)。与普通的文件系统不同,MFS是一种分布式的文件系统,类似...

服务器编程模型

多进程模型 1.fork子进程在accept阻塞等待连接。 业务和网络层分离为不同进程模型。 负载均衡模型,多个进程绑定不同的端口。 多线程模型 1.主线程在accept处阻塞,当有新连接时实时创建新线程处理,处理完关闭。 2.创建线程池,都在accept处阻塞,当有新连接时notify一个线程去处理,处理完归还。 3.线程(池)关联一个线程消息队列,主线程在accept处阻塞,将新连接放入消息队列,线程(池)读取线程消息队列处理。 Java最经典的处理就是一个链接一个线程处理: class Server implements Runnable { public void run() ...

×