Field.Store.COMPRESS:用压~的格式存储最初的Field?br /> Field.Store.NO:不存储该Field的原始?br /> Field.Store.YES:存储该Field的原始?br />
Field.Index.NO:不烦引Field的?br /> Field.Index.NO_NORMS:
Field.Index.TOKENIZED:作分词处?br /> Field.Index.UN_TOKENIZED:不分词,直接作ؓ完整的信息段索,可以支持全匹配和怼匚wQ跟数据库中的like很类伹{?br />
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;
}
3,Term t = new Term("content", "电力");
Query query = new TermQuery(t);
以上搜不到结?原因?电力"不是一个Term,????则可以?br />
4,reader.terms()q回索引中的所有term,没有重复。而TermDocs存放term兌的DocTermEnum enumerator = reader.terms();
while (enumerator.next()) {
Term term = enumerator.term();
System.out.println(term.field() + " " + term.text());
}
5,lucene不支持中文的* ?匚w
因ؓ英文是基于词? 中文是基于字?
英文mo?ey可以匚w到money ,因ؓmoney是一个term, 中文怎么办?除非中文有个好的分词Ҏ
6Q两ơ过滤后Qquery对象的tostring:
filtered(filtered(title:oracle content:oracle)->com.lucene.search.PrivilegeFilter@133d0fc)->com.lucene.search.CategoryFilter@dd5415
7,Hyper Estraier是一个用C语言开发的全文索引?
h高速度,高稳定?高可扩展?提供java,ruby的调用方?br /><q速搭建全文搜索^台——开源搜索引擎实战教E?gt;
http://www.162cm.com/archives/date/2007/07/18
8QHits hits = searcher.search (filteredquery, new Sort("fieldname"));//可根据第二个参数q行排序
int n=hits.id(2) //参数是在hits中的下标,q回的结果是在过滤和排序之前在directory中的原始下标
9Q?br />new一个BitSet(950)q不{于建立一?50大小的bs
只是说构建出来的bs初始大小臛_能容U?50个bit,大小永远是系l控制的。而且他的大小?4的倍数Q就BitSet(1),他的大小也是64?br />bitset.set(1, 4) 讄的是1,2,3,没有4
10Q对Field再进行切词就是Term?Term和Token的区?br />
11QBooleanQuery的例?
BooleanQuery bq = new BooleanQuery();
Query q1 = new TermQuery (new Term ("field", "one"));
Query q2 = new TermQuery (new Term ("sorter", "b"));
bq.add(q1, Occur.MUST);
bq.add(q2, Occur.MUST);
Hits hits = searcher.search(bq);
12Q可用RAMDirectory作测试,见lucene自带的测?br /> RAMDirectory directory = new RAMDirectory();
IndexWriter writer = new IndexWriter (directory, new WhitespaceAnalyzer(), true)
13Q进行过滤时如果有多个filterQ则某个doc是否能查到取决于q多个filter各自q回的bitset的综合结果:要查得某一位置的docQ所有的filter的该位必d部ؓtrue。所以查询结果与filter的先后顺序无兟?br />
14Q?-按user为tomq行qo
Filter f1 = new Filter() {
public BitSet bits(IndexReader reader) throws IOException {
BitSet bitset = new BitSet(reader.maxDoc());
TermDocs termDocs = reader.termDocs();// 实际是SegmentTermDocs
Term term = new Term("user", "tom");
termDocs.seek(term);//相当于持有了所有含有user为tom的doc的集合,但freq()和doc()q需要去文g中读?
while (termDocs.next()) {
System.out.println("freq:"+termDocs.freq());
bitset.set(termDocs.doc());
}
return bitset;
}
};
15QTrieQ又U单词查找树Q是一U特D的树Şl构Q用于保存大量的字符丌Ӏ它的优ҎQ利用字W串的公共前~来节U存储空间?br />http://www.javaeye.com/topic/299826
16,
doc相当于表中的记录
field相当于字D?br />不同的doc可能有相同的fieldQ也可能有不一L
我感觉比较适合用json格式存储
field+分词的关键字=term,是唯一?br />term出现在哪些doc中,索引文g里有记蝲Q?br />用Luke(http://code.google.com/p/luke)可以查看索引文g详细信息

]]>