Skip to main content

我的es之旅

· 2 min read

分词

什么是分词,分词是一个分类问题,一般是基于权重判断是否是需要切分.机器是识别不了文字的,所以只是一个权重的切分

分词会发生在两个步骤: 写入doc , 查询query

在lucene的堆栈一般是这样的,最后调用的是incrementToken 接口

incrementToken:147, StandardTokenizer (org.apache.lucene.analysis.standard)
incrementToken:37, LowerCaseFilter (org.apache.lucene.analysis)
incrementToken:51, FilteringTokenFilter (org.apache.lucene.analysis)
fillCache:91, CachingTokenFilter (org.apache.lucene.analysis)
incrementToken:70, CachingTokenFilter (org.apache.lucene.analysis)
createFieldQuery:318, QueryBuilder (org.apache.lucene.util)
createFieldQuery:257, QueryBuilder (org.apache.lucene.util)
newFieldQuery:468, QueryParserBase (org.apache.lucene.queryparser.classic)
getFieldQuery:457, QueryParserBase (org.apache.lucene.queryparser.classic)
handleBareTokenQuery:824, QueryParserBase (org.apache.lucene.queryparser.classic)
Term:494, QueryParser (org.apache.lucene.queryparser.classic)
Clause:366, QueryParser (org.apache.lucene.queryparser.classic)
Query:251, QueryParser (org.apache.lucene.queryparser.classic)
TopLevelQuery:223, QueryParser (org.apache.lucene.queryparser.classic)
parse:136, QueryParserBase (org.apache.lucene.queryparser.classic)

搜索

搜索的原理是 倒排+权重 ,然后取出权重最高的前几个,所以也可以看成是一个权重分类问题.

高可用

// todo

冗余

// todo

错误转移

// todo

lucence

lucence 的源码有简单的例子,主要分成三个部分

- 1 索引
- 1.1分词
- 2 存储
- Lucene有很多类,不过我抽象成存储应该不过分,这个我没有仔细看

- 3 搜索
- 3.1 计算权重(一般是idf-td)

我还没用仔细看es的内容,不过根据我编译原理的理解,es就是在上面加一层parse然后转换成相应的操作

相关阅读