|
1、源码 C3 X3 N) D; n# x0 z, E% ?
import java.nio.file.Paths;* B3 V/ g+ c, E4 J4 e
2 ]- c1 e0 n# O' a6 r- Z2 b: K) `
import org.apache.lucene.analysis.Analyzer;
+ q' g& n/ q/ b. Uimport org.apache.lucene.analysis.standard.StandardAnalyzer;$ r. H K k0 E {& r6 s) Q
import org.apache.lucene.document.Document;
* m8 l% n! v1 A1 m% L6 [$ wimport org.apache.lucene.document.Field;1 ]0 o8 S1 ?# c/ Y5 b# h( z
import org.apache.lucene.document.StringField;7 U; h3 p z6 ]* ]. j& b
import org.apache.lucene.document.TextField;% X+ Q/ t2 H V0 W: b; X5 L
import org.apache.lucene.index.DirectoryReader;
; `8 a6 {! a- Q4 V' ^import org.apache.lucene.index.IndexReader;! Y0 o2 C! K; z: V! G- A
import org.apache.lucene.index.IndexWriter;
9 X; G3 e7 A9 K& @; Z4 @import org.apache.lucene.index.IndexWriterConfig;2 l" u: u' i2 q. {4 n# j
import org.apache.lucene.index.Term;1 k; }& ]4 ^4 p
import org.apache.lucene.store.Directory;
$ W" |5 W& y' `% d; B- j& ?import org.apache.lucene.store.FSDirectory;8 h3 s, g( w- ~/ x
import org.junit.Before;
% } o. f0 N) y8 r7 Kimport org.junit.Test;
o; p' N F5 ~$ I3 d" ~1 g
% G$ V* z" b) {& f/ H. Ppublic class IndexingTest {
8 @) a8 F. t0 H& B! j# j, D4 K6 m
& _3 s+ @6 O( H9 o; B private String ids[]={"1","2","3"};& z. ~ L& z, x. [: f
private String citys[]={"qingdao","nanjing","shanghai"};' M! [& {7 C' b. r6 m( N3 W2 b
private String descs[]={
5 C; v# f& F1 y: [! J, q "Qingdao is a beautiful city.",
& U+ u' y. N# O4 H "Nanjing is a city of culture.",
) Y* ]3 z8 k: L! v$ b# m "Shanghai is a bustling city."3 \/ f. v4 O. N4 a9 |; W
};* u8 |4 A2 e. T9 V" D; L9 C
' e# J& I' O( {9 _ private Directory dir;, S# P: F) |" \* D8 J% ~
- u2 l+ N0 E" M
@Before6 q* e) A9 D. B# v- H
public void setUp() throws Exception {& h% l' F+ u( F. R
dir=FSDirectory.open(Paths.get("D:\\lucene2"));
* ^* C' l: P' U IndexWriter writer=getWriter();
1 r; D4 }/ K1 i/ t7 n1 P5 t( L$ F; B5 u for(int i=0;i<ids.length;i++){- f4 W! y/ Q+ R: ?3 V% S
Document doc=new Document();
\$ ^, |' E) @$ S% U, u% U8 \ doc.add(new StringField("id", ids, Field.Store.YES));
0 F- B0 Y( d; D1 J4 \ doc.add(new StringField("city",citys,Field.Store.YES));& }& `4 w* j9 `# V
doc.add(new TextField("desc", descs, Field.Store.NO));
3 d; R" Z* U5 q writer.addDocument(doc); // 添加文档+ L" ]9 s# X) d0 t$ `& R- d
}
* p, l* _2 c3 C# g. Y writer.close();
6 A$ n, A6 J+ ]" r }8 |, @! z1 u, B0 O6 T r
r4 g) R. S _$ ^+ z
/**
: I ?1 K. |* J5 V0 o * 获取IndexWriter实例
. P' U$ H4 n6 R( e; f2 D; j& Z * @return: r. e/ s9 ^9 N5 |% ~& C: L! o
* @throws Exception
6 n% _) x* {9 f6 y */
Y4 X3 S) v f' [ private IndexWriter getWriter()throws Exception{
( |) g9 `( { A; F" n7 _ Analyzer analyzer=new StandardAnalyzer(); // 标准分词器" E( A# v& I2 o& U: N: @
IndexWriterConfig iwc=new IndexWriterConfig(analyzer);
1 e7 P8 G& [( y* v* L& ? IndexWriter writer=new IndexWriter(dir, iwc);5 l( V$ z4 b. @, T5 f6 T: {+ i
return writer;& H/ m2 }+ y& O2 ]2 `( B
}; _6 s, [$ w# W5 H
+ S. X+ { x0 l3 x, B
/**
) ?% z X. X6 W. N% n& r1 M: | * 测试写了几个文档
8 s0 M; W3 L ?$ F4 y3 o0 }, ` * @throws Exception6 {! C: w7 a1 t7 v5 S) J
*/
8 Q1 p! p8 [' d* J0 O' x) _* G4 V @Test0 @- {6 W0 b' g L3 e
public void testIndexWriter()throws Exception{. Q' l9 P* Q# L3 ~$ |" _) O4 H
IndexWriter writer=getWriter(); k7 q6 C \ \" r: g3 h
System.out.println("写入了"+writer.numDocs()+"个文档");
* _2 ?8 X% v4 D* g1 H+ Y+ @ writer.close();
/ T/ q1 Z; ^- P( ^ }+ f6 m, z" ^: R8 R3 a
& Z3 x8 P8 \8 z( P
/**+ f$ z1 N* t/ j1 M; R$ {1 B
* 测试读取文档
; f( A6 \0 t( Z. Y' H * @throws Exception
" P7 t/ }7 ]& L3 v- a. j0 @7 A( O */. b* h% Y I+ ~9 r
@Test8 Z$ A. k4 q# i% g
public void testIndexReader()throws Exception{0 {# ?5 Q: `/ G6 P/ g8 R6 N
IndexReader reader=DirectoryReader.open(dir);9 t6 Z6 V3 c# `2 ]
System.out.println("最大文档数:"+reader.maxDoc());
/ c$ ]5 r/ a8 A5 P System.out.println("实际文档数:"+reader.numDocs());
* ^7 a" z! o" p& F# |% a8 b; d reader.close();
& _: U: E' f! o( K! ? }2 ^) o Z( m' ^" M. y. Z0 v
- v/ C9 S, q/ H: o9 i% h
/**6 g6 {, y6 y" `1 E0 H1 \5 k
* 测试删除 在合并前# x& a. X, ]+ s, d: F3 n
* @throws Exception
/ X4 \% t& b4 W3 z3 E! D* K" U */9 s+ F5 p, j& w- n1 ^! G
@Test8 [: p5 U0 W9 _ }. W; M' i! e
public void testDeleteBeforeMerge()throws Exception{
; ?5 W' M- h. @9 A; w IndexWriter writer=getWriter();$ L9 F) a3 P3 V) k8 j
System.out.println("删除前:"+writer.numDocs());
: l- M. N* g3 d4 | writer.deleteDocuments(new Term("id","1"));5 h) ~' B2 ^* D: }
writer.commit();. c( G, t* x- s& i2 G8 \8 W
System.out.println("writer.maxDoc():"+writer.maxDoc());
) k! k$ s) d6 d System.out.println("writer.numDocs():"+writer.numDocs());% T: q: W9 {/ M* Z9 c8 z
writer.close();
0 x, M, d" r: O3 u/ D1 d! Z }' `! C+ c3 x# t% P! B
k/ ^8 c; \9 ~0 T% P. O2 t/ @2 _
/**
. a& u1 T% Y* Q" c+ N7 n4 W+ R * 测试删除 在合并后1 t5 H+ k" ?( \0 H9 F) T. A
* @throws Exception
; E! X8 p7 T( C2 g/ b, H; j */2 S6 K) k( r, o$ t9 c
@Test, v; e" a& n# J; ?, M! c7 @
public void testDeleteAfterMerge()throws Exception{
7 f# q, P) X8 j0 ^) s/ N0 l IndexWriter writer=getWriter();4 O/ W4 B" V; l+ k
System.out.println("删除前:"+writer.numDocs());% Y2 ^( H# o3 p, |4 H% G6 X8 W
writer.deleteDocuments(new Term("id","1"));
. L2 ^$ v- D0 ^: M$ q6 B4 R7 e writer.forceMergeDeletes(); // 强制删除
4 D7 k3 G; ]* K writer.commit();& I7 i; D' @. A8 s
System.out.println("writer.maxDoc():"+writer.maxDoc());/ o# p0 j9 J& _, \
System.out.println("writer.numDocs():"+writer.numDocs());, ?5 @& i9 g3 R8 Y* B1 i3 n) |" m
writer.close();$ N* j! d4 j+ ~& X' D$ ?
}
! J7 n9 a) S2 O- _9 f" g8 ~+ C4 z' x' U9 ?
/**
% | o0 V( ]& ]3 e. c) m/ U * 测试更新 g) ?% X, ?1 w) J
* @throws Exception
' h( O" E% I8 ]/ a, O */% o# |- \0 ]2 ?# j" H: z( W% t1 G
@Test
: s1 _! e- R7 S& ^/ k5 w public void testUpdate()throws Exception{6 a: |5 [: j1 Q/ p
IndexWriter writer=getWriter();2 ^7 o7 X7 G5 Q+ T% N- R" ^- a; V. Z' n
Document doc=new Document();. O6 d0 h+ ~- c9 [! v! Y
doc.add(new StringField("id", "1", Field.Store.YES));
4 S1 Q/ s, B+ ^0 M6 B0 n, f doc.add(new StringField("city","qingdao",Field.Store.YES));9 A- k; Q Y y5 f' r6 {. ~! Z/ F
doc.add(new TextField("desc", "dsss is a city.", Field.Store.NO));" c6 {9 L/ @9 {8 T
writer.updateDocument(new Term("id","1"), doc);
! g3 s4 A/ y; D4 Y' i0 l writer.close();
- ]+ q" k b, X1 m% B0 y7 Z: @: q- W$ C }
9 }- C. h6 \( r! M4 W' W- u$ E4 @}0 L$ C, m F3 j7 O; _ l6 V0 v
9 f( E- D' H1 g! V5 y; g
6 U4 `+ r7 S: O( N: u8 |/ e* }# C- D$ F# {7 Z) K
|
|