Category Archives: 搜索技术

ElasticSearch / Lucene / Sphinx / Xapian

《Lucene in Action》第五章---高级主题

5.1  Filed的Cache
有时,存在这样的需求:快速的访问每个Document的Field,但是Lucene只是做了反向索引,因此这种正向索引非常耗时。

Stored fields是一种解决方法,但是也很慢,特别当量大的时候,占用很多内存。

Field的Cache能很好地解决这个问题。

要求

Document必须只有一个Token

用法

float[] weights = FieldCache.DEFAULT.getFloats(reader, “[......]

继续阅读

《Lucene In Action》第四章.Analysis(分词)

简单来说,Analysis就是把field Text转化成基本的Term的形式。

通过分词,将Text转化为Token,Token+对应的Field即为Term。

分词的处理包括:萃取、丢弃标点、移除发音、小写、移除常用单词、去除变形(去掉过去时等)等。

本章将介绍如何使用内置的分词器,以及如何根据语言、环境等特点创建自己的分词器。
4.1  使用Analysis
分词用于所有需要将Text转化成Term的场合,在Lucene中主要有两个:

1、Index(索引)[......]

继续阅读

《Lucene In Action》第三章.搜索

主要的类

IndexSearcher:搜索的主类。

Query(及具体子类):被传入IndexSearcher的search方法,用于逻辑上的搜索。

QueryParser:将人工输入的查询字符串转化成Query对象。

TopDocs:存储着得分最高的那些文档,由IndexSearcher的search方法返回。

ScoreDoc:TopDocs中的每一个文档,他们只保留着Document的引用。
3.1 实现简单的索引功能
可以通过符合Lucene的字符串或者[......]

继续阅读

Lucene in Action(2nd)--第二章 索引

2.1  从概念理解Lucene的Index(索引)文档模型
Lucene主要有两种文档模型:Document和Field,一个Document可能包含若干个Field。

每一个Field有不同的策略:

1.被索引 or not,将该字段(Field)经过分析(Analyisi)后,加入索引中,并不是原文。

2.如果被索引,可选择是否保存“term vector”(向量),用于相似检索。

3.可选择是否存储(store),将原文直接拷贝,不做索引,用于检索后的取出。[......]

继续阅读