1,Field.Store与Field.Index
Field.Store.COMPRESS:用压缩的格式存储最初的Field值
Field.Store.NO:不存储该Field的原始值
Field.Store.YES:存储该Field的原始值
Field.Index.NO:不索引Field的值
Field.Index.NO_NORMS:
Field.Index.TOKENIZED:作分词处理
Field.Index.UN_TOKENIZED:不分词,直接作为完整的信息段检索,可以支持全匹配和相似匹配,跟数据库中的like很类似。
2,实现Filter接口
3,Term t = new Term("content", "电力");
Query query = new TermQuery(t);
以上搜不到结果.原因是"电力"不是一个Term,用"电"或"力"则可以。
4, reader.terms()返回索引中的所有term,没有重复。而TermDocs存放term关联的Doc
5,lucene不支持中文的* ?匹配
因为英文是基于词的, 中文是基于字的
英文mo?ey可以匹配到money ,因为money是一个term, 中文怎么办?除非中文有个好的分词方案
6,两次过滤后,query对象的tostring:
filtered(filtered(title:oracle content:oracle)->com.lucene.search.PrivilegeFilter@133d0fc)->com.lucene.search.CategoryFilter@dd5415
7,Hyper Estraier是一个用C语言开发的全文检索引擎,
具有高速度,高稳定性,高可扩展性?提供java,ruby的调用方法
<迅速搭建全文搜索平台——开源搜索引擎实战教程>
http://www.162cm.com/archives/date/2007/07/18
Field.Store.COMPRESS:用压缩的格式存储最初的Field值
Field.Store.NO:不存储该Field的原始值
Field.Store.YES:存储该Field的原始值
Field.Index.NO:不索引Field的值
Field.Index.NO_NORMS:
Field.Index.TOKENIZED:作分词处理
Field.Index.UN_TOKENIZED:不分词,直接作为完整的信息段检索,可以支持全匹配和相似匹配,跟数据库中的like很类似。
2,实现Filter接口
public
BitSet bits(IndexReader reader)
throws
IOException {
final BitSet bits = new BitSet(reader.maxDoc()); // 默认所有都为false
// 设置所有的都不能检索到
// bits.set(0, bits.size() - 1, false);
bits.set( 3 , true );
bits.set( 4 ); // 设置为true
int [] docs = new int [ 1000 ];
int [] freqs = new int [ 1000 ];
TermDocs termDocs = reader.termDocs( new Term( " title " , " 测试 " ));
int count = termDocs.read(docs, freqs); //
for ( int i = 0 ; i < docs.length; i ++ ) {
System.out.println(docs[i] + " -- " + freqs[i]);
bits.set(docs[i]);
}
return bits;
}
final BitSet bits = new BitSet(reader.maxDoc()); // 默认所有都为false
// 设置所有的都不能检索到
// bits.set(0, bits.size() - 1, false);
bits.set( 3 , true );
bits.set( 4 ); // 设置为true
int [] docs = new int [ 1000 ];
int [] freqs = new int [ 1000 ];
TermDocs termDocs = reader.termDocs( new Term( " title " , " 测试 " ));
int count = termDocs.read(docs, freqs); //
for ( int i = 0 ; i < docs.length; i ++ ) {
System.out.println(docs[i] + " -- " + freqs[i]);
bits.set(docs[i]);
}
return bits;
}
3,Term t = new Term("content", "电力");
Query query = new TermQuery(t);
以上搜不到结果.原因是"电力"不是一个Term,用"电"或"力"则可以。
4, reader.terms()返回索引中的所有term,没有重复。而TermDocs存放term关联的Doc
TermEnum enumerator
=
reader.terms();
while (enumerator.next()) {
Term term = enumerator.term();
System.out.println(term.field() + " " + term.text());
}
while (enumerator.next()) {
Term term = enumerator.term();
System.out.println(term.field() + " " + term.text());
}
5,lucene不支持中文的* ?匹配
因为英文是基于词的, 中文是基于字的
英文mo?ey可以匹配到money ,因为money是一个term, 中文怎么办?除非中文有个好的分词方案
6,两次过滤后,query对象的tostring:
filtered(filtered(title:oracle content:oracle)->com.lucene.search.PrivilegeFilter@133d0fc)->com.lucene.search.CategoryFilter@dd5415
7,Hyper Estraier是一个用C语言开发的全文检索引擎,
具有高速度,高稳定性,高可扩展性?提供java,ruby的调用方法
<迅速搭建全文搜索平台——开源搜索引擎实战教程>
http://www.162cm.com/archives/date/2007/07/18