Lucene

Lucene explain输出详解

Nov 25, 2015 | | Say something

JQuery in Action 1.3116325 = (MATCH) weight(name:jquery in 4) [DefaultSimilarity], result of: 1.3116325 = score(doc=4,freq=1.0 = termFreq=1.0 ), product of: 0.99999994 = queryWeight, product of: 2.0986123 = idf(docFreq=1, maxDocs=6) 0.47650534 = queryNorm 1.3116326 = fieldWeight in 4, product of: 1.0 = tf(freq=1.0), with freq of: 1.0 = termFreq=1.0 2.0986123 = idf(docFreq=1, maxDocs=6) 0.625 = fieldNorm(doc=4) […more]

Lucene MoreLikeThis 完整示例

Nov 19, 2015 | | Say something

基于lucene 4.3.0 MoreLikeThis 的功能是,指定document,指定document中进行匹配的fieldName,根据这些fieldName中的term vector,产生一个查询对象(Query),具体的代码如下

本博客有javacoder.cn整理

lucene TokenStream 文档

Nov 19, 2015 | | Say something

翻译自lucene 4.3.0 TokenStream遍历token(就是一个个的分词)序列,这些token可能来自于Document的Field或者查询字符串 这是一个抽象类,具体的子类有 Tokenizer,它的输入为一个Reader对象 TokenFilter,输入是另一个TokenStream 在2.9版本引入了一个新的API,原来基于token,现在基于属性(Attribute)。虽然Token类在2.9中作为一个方便类仍然存在。推荐存储token信息的方式是使用AttributeImpls(新的基于属性api的一个类)。 现在TokenStream继承于AttributeSource,后者提供了访问token属性的方法。每一种类型的AttributeImpl只创建一个实例,每个token重用这些实例来减少创建对象和支持本地缓存AttributeImpl对象。可以查看incrementToken()方法获取更多的信息 新的TokenStream API的流程如下: 1)在初始化TokenStream时添加对应的属性,比如KeywordTokenizer文件中如下代码 private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); 2)客户端调用TokenStream.reset() 3)客户端获取需要访问的属性的本地引用 4)客户端调用incrementToken()直到返回false,每次调用就可以获取对应的token的属性 5)客户端调用end()方法让TokenStream执行扫尾操作 6)客户端使用完TokenStream后调用close()释放资源 为了让过滤器和消费者知道哪些属性是可用的,属性要在初始化的时候加入TokenStream中,客户端和过滤器不需要在调用incrementToken()方法后检查属性是否可用 你可以在analysis包级的javadoc中发现一些示例 有时需要捕获当前TokenStream对象的状态,比如,为了缓存(参考CachingTokenFilter, TeeSinkTokenFilter)。可以使用AttributeSource.captureState 和 AttributeSource.restoreState方法来做这个事。 TokenStream 新的API基于装饰模式(decorator pattern),因为所有非抽象的子类必须为final或者至少incrementToken是final的,当java的断言启用是会检查的 实例,查看Analyzer的分词结果

 

lucene 自带分词器总结

Nov 18, 2015 | | Say something

KeywordAnalyzer 将整个内容当成一个term,即没有分词 WhitespaceAnalyzer 在空格处分词 SimpleAnalyzer 非字母处分词,会过滤掉数字,且转换为小写 StopAnalyzer 在SimpleAnalyzer的基础上,去掉stop words StandardAnalyzer 在StopAnalyzer的基础上,支持ip,email地址,数字,字母中日韩等字符的提取 PerFieldAnalyzerWrapper 每个Field一个分析器的支持

lucene-4-3-1备份报”No index commit to snapshot”异常

Nov 17, 2015 | | Say something

学习lucene比较全面的资料只有《lucene in action》这本书,而它是基于lucene3.0.2版本编写的很多时候会遇到某些方法不存在的问题。google一番后发现如下的问题: The problem is that the SnapshotDeletionPolicy you use to configure the IndexWriter initially, is NOT the same one that the IndexWriter uses. On construction, the IndexWriter actually clones the SnapshotDeletionPolicy you passed in, so the first block of code above should look like this instead: 就是说在构造IndexWriter的时候,它对传入的SnapshotDeletionPolicy对象进行了一次clone操作,所以当我们想要进行备份的时候应该使用clone后的对象,代码如下

参考文档: http://stackoverflow.com/questions/17753226/lucene-4-3-1-backup-process