lucene 笔记;

Indexing:

1.  Index.NOT_ANALYZED: 不要分析doc的这个域, 例如:这个域可能是时间,或者关键的号码,不希望 lucene 去解释它,即将这个 filed 当成完整的一个 token,term, 但是这个域是可以检索到的,令这个值唯一可以精确控制索引的文档;

2. Index.ANALYZED_NO_NORMS:   不存储向量信息

3. Index.NO:  不参与索引;

4. 在 lucene 存储索引的时候,通常也要存储 term 出现的次数,位置等,但在有的应用在是不需要的。例如: 筛选, 只要有某个词语就满足要求了,此时使用 Field.setOmitTermFreqAndPositions(true) ,可以加快索引和搜索速度,同时减少存储空间。

5. Store.NO:  不存储域的值,通常和 Index.ANALYZED 一起使用, 例如:对于网页, 对内容检索后,只需要它的 url 即可,需要的时候更具 url 去取即可,还有文件的搜索,保存文件路径即可。

6. TermVectors.YES: 记录出现在该文档中的所有 term, 其信息有出现的位置,次数等, 使用 IndexReader 可以读出来。这里的 postion 和 offset 区别如下:

the quick brown   对于 quick:  position = 2, 一个单词一个单词递增, offset为 4 ~ 9 在原文中的字节位置;



对于被分析的存储其分析后的 term, 不存储原始内容。不分析的内容,本身可以看成是一个 term, 这样看来,都是只存储 term 。


Analysis:

text    -> token  -> term

索引最后使用 term, 同样对于搜索的请求,也转化为 term, 这样就匹配上了~~

使用在2处: indexing  和 searching 

Analyzing:

 " The quick brown fox jumped over the lazy dogs"

"XY&Z Corporation - xyz@expmaple.com"


$ WhitespaceAnalyzer $:

[The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]

[XY&Z] [Corporation] [-] [xyz@example.com]


$ SimpleAnalyzer $:

[the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]

[xy] [z] [corporation] [xyz] [example] [com]


$ StopAnalyzer $:

[quick] [brown] [fox] [jumped] [over] [lazy] [dogs]

[xy] [z] [corporation] [xyz] [example] [com]


$ StandardAnalyzer $:

[quick] [brown] [fox] [jumped] [over] [lazy] [dogs]

[xy&z] [corporation] [xyz@example.com]


注意上面是分别对原始短语直接使用几个分析器,而不是先使用一个,在其得到的结果后再使用另外一个分析器。也就是说,StandAnalyzer同时含有小写,以空格分词的功能,包含了其他分词器的某些功能等。


// 在索引的时候使用分析器的流程:

(1) 所有的 document 使用同样的分析器;

Analyzer analyzer = new StandardAnalyzer();

IndexWriter writer = new IndexWriter(directory, analyzer ...);

writer.addDocument(doc) 

(2)  对于某个文档使用单独的分析器,但是在搜索的时候进行 QueryParser 的时候也要使用这个分析器,以便 term 结果一致;

writer.addDocument(doc, analyzer);


// 在搜索的时候使用分析器

QueryParser parser = new QueryParser("content", analyzer);

Query query = parser.parse(expression);

注意: 如果搜索语句中含有 and  or 什么的,这时由 QueryParser 来分析的, 分析器只分析单个text 片段,解析成 term 形式,这是好理解的。


分析器需要实现的函数:

public  TokenStream tokenStream(String fieldName, Reader reader)













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值