|
1、源码
& p5 p3 M. I" q3 F0 u2 ~) Simport java.nio.file.Paths;0 |+ d' W4 B9 D/ l
$ B& M+ v% _- W$ ]1 L( c
import org.apache.lucene.analysis.Analyzer;5 D" A+ K) |2 v q! a
import org.apache.lucene.analysis.standard.StandardAnalyzer;) M/ d% [" O# Y e
import org.apache.lucene.document.Document;+ |0 A. b# T# O; s$ z$ M9 F
import org.apache.lucene.document.Field;
6 {5 @) T7 C9 J2 u" _" U {; ~! Kimport org.apache.lucene.document.StringField;6 ? W; \ P. {, T% M; b! L8 D
import org.apache.lucene.document.TextField;5 D m2 W3 t( Y' S; |! }2 ]7 J/ m5 @
import org.apache.lucene.index.DirectoryReader;2 }. L5 S2 p) ~, |
import org.apache.lucene.index.IndexReader;
# t5 d4 Y' d, a _9 rimport org.apache.lucene.index.IndexWriter;
% w0 H' \! m! Bimport org.apache.lucene.index.IndexWriterConfig;
0 x9 P: p0 k m# N- j' O3 W: cimport org.apache.lucene.index.Term;
& _% x' T7 h) iimport org.apache.lucene.store.Directory;+ w! j2 O- w/ b9 k5 C7 X
import org.apache.lucene.store.FSDirectory;# e+ m* I8 p% g3 W. {- Q
import org.junit.Before;
E. Z, _8 _( S3 u# Z U" K4 Zimport org.junit.Test;
9 C8 E# I. S5 q7 U: O4 Y" R
* m% a+ v. ~, g/ {1 L! J5 Q! gpublic class IndexingTest {3 ?# {7 c$ ?4 X7 L# J
. x. O" i( @9 C* b private String ids[]={"1","2","3"};7 ~( g7 }7 I: {) @
private String citys[]={"qingdao","nanjing","shanghai"};
& w( o: |5 w& V; a+ W; s private String descs[]={6 w! T& K& l- n
"Qingdao is a beautiful city.",! W' r/ @* Y3 V/ a
"Nanjing is a city of culture.",
- N% p- L4 t B "Shanghai is a bustling city."
i/ e" t c4 y% T( E( X3 k };' f% v4 v* W" Q, |
( G. V8 q, k! k" y% T9 W private Directory dir;+ \7 I) y# B) p
3 Z8 t0 t' ?3 W5 v$ m
@Before i; n) R8 l% J9 u4 J* F9 }% @
public void setUp() throws Exception {7 y/ e- |5 U9 p- M* @
dir=FSDirectory.open(Paths.get("D:\\lucene2"));
2 c2 W u9 ?3 T" Q IndexWriter writer=getWriter();6 q. ^7 s( B+ F
for(int i=0;i<ids.length;i++){* [% h( O2 ~/ E
Document doc=new Document();
, Z! v! V# P7 H$ j+ G7 X6 O9 r doc.add(new StringField("id", ids, Field.Store.YES));6 w6 D D/ m- Y. H, y% J
doc.add(new StringField("city",citys,Field.Store.YES));
% Y: o! \5 H: s* z3 O- S$ k. C doc.add(new TextField("desc", descs, Field.Store.NO));, R5 B, g% B4 _7 Q$ l& F i, Z
writer.addDocument(doc); // 添加文档
& M& I: o( }" ^9 U0 E3 V( d }5 @5 o5 E5 l! N
writer.close();/ F: _6 E/ L. I2 e) I3 Z4 O: ^7 ^
}' W" m/ N; D2 s6 Z/ I3 Y
* K6 r+ l9 x! B /**
6 ~6 ?9 m* x F9 }" A$ | * 获取IndexWriter实例) T! ?' R' s: Y0 M3 s
* @return
) Z) `4 ]- @0 V * @throws Exception' ^. |. ]+ C% o' {8 y5 B/ P
*/: g5 t. t, P- n, ^. U4 L. f
private IndexWriter getWriter()throws Exception{
! f4 E4 M" X' c$ ?: \" g+ C# O Analyzer analyzer=new StandardAnalyzer(); // 标准分词器
- Z$ A5 I* j. `0 h! J4 o8 ] IndexWriterConfig iwc=new IndexWriterConfig(analyzer);
: k' k# _' S. |* z& I IndexWriter writer=new IndexWriter(dir, iwc);
$ W- K! e3 @! t3 `9 g return writer;
V; b; E1 F8 n) k4 [0 @ D7 Y5 g }# w- R/ d, i5 O' f/ s' n" _( w
X1 W3 G7 \& k1 y0 { /*** J0 _5 y7 [9 [# R
* 测试写了几个文档2 R$ p" f1 N5 Z8 ~+ ~
* @throws Exception
- @/ t7 n' I( ]$ _( l! G */" j; R# b: i1 C% O1 `* J
@Test& w+ \% o) K: u$ }/ i/ I
public void testIndexWriter()throws Exception{
6 g- C+ \$ Q3 P' I' k IndexWriter writer=getWriter();
1 V0 w' x- V: h5 ^* H) v System.out.println("写入了"+writer.numDocs()+"个文档");: c2 l: v4 g/ w( v- V. s5 ^( k
writer.close();$ [7 U" v8 i n0 l
}( @* a4 r* o2 C$ k9 A
3 ?+ x b! ]. z /**1 {5 C( F4 X& ~' F/ U# a
* 测试读取文档) P" V/ Y& V5 u7 x' m. D
* @throws Exception
) D7 U5 y5 ?1 ]$ G, \) U: L */
% f3 b1 u# d# \' ` @Test9 i5 s$ V8 @- h$ ?/ x; B
public void testIndexReader()throws Exception{
0 B) [9 L' s- A) q" | IndexReader reader=DirectoryReader.open(dir); L8 P8 M1 `, @* D6 ?
System.out.println("最大文档数:"+reader.maxDoc());
0 O& P4 T8 s! Z _8 W' B System.out.println("实际文档数:"+reader.numDocs());. s# K4 L5 i; G: U
reader.close();
% V) R& h3 f" U% O# _0 Q7 p/ u& m }
" a' I' m" a% q" n( ~ @
9 w8 N9 A, M5 B5 ~' [, j z /**
7 ~3 E k. P: Y' s; A * 测试删除 在合并前4 }" \/ j# i m3 t4 Y3 C5 f8 S
* @throws Exception
* M+ _, {$ [1 w% v, {; H- U */
# b' I& A3 T. d$ a) \# c8 s @Test
% F, ]' \( w% x* b: F7 d public void testDeleteBeforeMerge()throws Exception{
6 z$ l2 R3 N6 s" E9 N- M& M; K IndexWriter writer=getWriter();& D: t+ {+ P( F
System.out.println("删除前:"+writer.numDocs());0 w* m, y- i# { X6 [+ @/ T
writer.deleteDocuments(new Term("id","1"));# r, Y; M, @& a7 [0 a8 a
writer.commit();% J! \3 l( U- p5 x# W
System.out.println("writer.maxDoc():"+writer.maxDoc());2 a" G" r L! d+ `. [! C
System.out.println("writer.numDocs():"+writer.numDocs());" c r0 a- K! y
writer.close();
8 u* m/ O2 X% j. N } \4 y9 B' p( F, p
. ? s' a+ B3 `
/**5 [7 S4 @: ], q* c* |3 Y
* 测试删除 在合并后6 G) I! F: K/ y" l
* @throws Exception: e3 b' F- X0 r7 B: b
*/) T! L8 _9 [; s: a8 D
@Test/ b5 n& t& C: I) G- M$ V( j! f2 H
public void testDeleteAfterMerge()throws Exception{
- f, H8 |) ]2 J* b$ e: I1 x IndexWriter writer=getWriter();
. Q% ?+ A8 w0 T0 O# H: v System.out.println("删除前:"+writer.numDocs());
& [1 G8 z& l3 d+ N1 [ writer.deleteDocuments(new Term("id","1"));
3 s7 ]5 S& T' I- g' U. ? writer.forceMergeDeletes(); // 强制删除6 ^! i1 B5 [. B9 i1 N* |
writer.commit();
' v2 J( B' a- f4 A; |$ J6 s) ` y System.out.println("writer.maxDoc():"+writer.maxDoc());5 S* o: n6 a6 \: f
System.out.println("writer.numDocs():"+writer.numDocs());
8 m0 B+ w: s. W; m/ m writer.close();
1 E( R) u% N( p5 p3 x }
# `; y) Z. G" |& ?, A
f7 {4 W% y- c9 I3 x6 ^ /**
3 O3 f3 x2 k! n j6 r% [; D5 u3 J * 测试更新* W3 v0 o7 N' H9 B8 X+ }
* @throws Exception3 t5 @+ B( i$ p* [/ N
*/ G3 T$ Z7 ]! R/ d, P0 b* C
@Test# z$ a P- ]) A) ?/ y
public void testUpdate()throws Exception{( k5 V5 B$ d9 m3 m/ U5 `
IndexWriter writer=getWriter();
6 E9 o, L% t4 T# U Document doc=new Document();
1 O, p9 {8 U3 P doc.add(new StringField("id", "1", Field.Store.YES));; y- Q3 d+ I5 e/ y/ i9 C- g+ ^- w' I& E
doc.add(new StringField("city","qingdao",Field.Store.YES));7 E: W0 f; M7 x/ t; P3 i
doc.add(new TextField("desc", "dsss is a city.", Field.Store.NO));% I. H3 u) D# _- B5 u: h6 \
writer.updateDocument(new Term("id","1"), doc);
" r% J2 i7 k7 o O; Z& S( X writer.close();4 k6 |, C3 Y$ u9 G) R" C: V0 e
}
p, g0 q T& C$ b& K* L3 Z}# N2 m3 S5 j2 y# M0 Z! n
, M1 w7 @' B' L2 E# c) L" O1 s6 ~! O% q/ Z) K( G
2 Q' o1 K' ~9 m+ [. _' L
|
|