本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
基本信息
书名:自己动手写分布式搜索引擎
定价:59.00元
作者:罗刚,崔智杰
出版社:清华大学出版社
出版日期:2017-09-01
ISBN:9787302477082
字数:650000
页码:428
版次:1
装帧:平装
开本:16开
商品重量:0.4kg
编辑推荐
猎兔搜索工程师数十年技术积淀与升华,讲解分布式搜索引擎的基本算法与原理。ElasticSearch分布式集群实践经验的总结,带领读者快速入门分布式搜索引擎开发。
内容提要
本书介绍了分布式搜索引擎开发的原理与Java实现,主要包括全文检索的原理与实现、分布式算法与代码实现、SolrCloud和ElasticSearch的使用与原理等内容,并着重介绍了一种实现分布式中文搜索引擎的方法。
本书适合有Java程序设计基础的开发人员或者对分布式搜索引擎技术感兴趣的从业人员使用
目录
作者介绍
罗刚,计算机软件硕士,毕业于吉林工业大学。2005年创立北京盈智星科技发展有限公司,2008年联合创立上海数聚软件公司。猎兔搜索创始人,当前猎兔搜索在北京、上海以及石家庄均设有研发部。他带领猎兔搜索技术开发团队先后开发出猎兔中文分词系统、猎兔文本挖掘系统,智能垂直搜索系统以及网络信息监测系统等,实现互联网信息的采集、过滤、搜索和实时监测,其开发的搜索软件日用户访问量万次以上。
文摘
第2章 自己动手写全文检索
很多软件系统都需要对应的数据结构。信息检索中常用的数据结构是倒排索引。全文索引如图2-1所示。
图2-1 以词为基础的全文索引
倒排索引就是一个词到文档列表的映射。用HashMap实现的一个简单的倒排索引代码如下。
public class InvertedIndex {
Map
new HashMap
// 索引文档
public void indexDoc(String docName, ArrayList words) {
int pos = 0;
for (String word : words) {
pos++; // 位置
List idx = index.get(word);
if (idx == null) {
idx = new LinkedList;
index.put(word, idx);
}
idx.add(new Tuple(docName, pos));
System.out.println('indexed ' + docName + ' : ' + pos + ' words');
}
}
// 搜索
public void search(List words) {
for (String word : words) {
Set answer = new HashSet;
List idx = index.get(word);
if (idx != null) {
for (Tuple t : idx) { //找到了一些文档
answer.add(t.docName);
}
}
System.out.print(word);
for (String f : answer) {
System.out.print(' ' + f); //输出文件名
}
System.out.println('');
}
}
private class Tuple { //<文档名,位置>元组
private String docName; // 文档名
private int position; // 位置
public Tuple(String d, int position) {
this.docName = d;
this.positio= position;
}
}
}
如果用户的查询中包含多个词,需要统计这些词在文档中出现的区间大小。区间越小的文档相关度越高。
public class Spa{
public int start; // 开始位置
public int end; // 结束位置
序言