Lucene - PowerPoint PPT Presentation

1 / 33
About This Presentation
Title:

Lucene

Description:

FSDirectory , java.nio . – PowerPoint PPT presentation

Number of Views:90
Avg rating:3.0/5.0
Slides: 34
Provided by: tis137
Category:
Tags: java | lucene

less

Transcript and Presenter's Notes

Title: Lucene


1
Lucene
??? ??? ??? ????? ????? 2015-01-19
2
??
1. Lucene
1-1 ?? ? ???? 1-2 ?? ??????? ?? 1-3 ???? ?????
??
3
Lucene
Chapter 1
4
??
1-1
??
  • ??? ??? ? ?? ???? ??????, ??? ????? ???? ???
    ????? ?????? ?????.
  • ?? ??? ??? ?? ??? ??? ? ?? ???? jar ?? ?? ??????
    ??? ???? ??.
  • ?? ??? ??? ???, ?? ??? ????? ??? ???? ?? ??? ???
    ? ??.(C, C, C, ??, ?, ???, PHP ?)
  • http//lucene.apache.org/
  • http//www.acornpub.co.kr/book/lucene-2nd

????
??
  • ?? ?? ???(??) ?????, ???? ????(SourceForge)????
    ?? ?????? ?? ?? ? ???.
  • 2001? 9? ???? ?? ????? ???? ??? ??? ???? ?????
    ???? ??
  • 2005? ?? ??? ?? ????? ??? ??? ??? ?????
    ??.(http//lucene.apache.org/java)

4
5
?? ??????? ??
1-2
??
  • ????? ??? ?? ??? ??? ??
  • ??? ???? ??? ??(???, ???, ???/??? ??)
  • ??? ?????? ?? ???? ??? ?? ???? ?? ??? ??
  • ?? ??? ??? ??? ???? ??? ??
  • ???? ??? ??? ??? ???? ?? ??? ?????(??, ?? ?)??
    ??? ????

???
???????
???????
???? ?????
?? ?? ??
?? ??
?? ??
??
??? ?? ??
?? ??? ??
?? ?? ??
?? ?? ??? ??
????
5
6
???? ????? ??
1-3
??
  • ??(Solr, http//lucene.apache.org/solr) ??? ??
    ????? ?? ???? ??????, ??? ??????? XML ?? ?? ???
    ???? ??? ?? ??. ?? ?? ????? ??? ??? ??? ???? ????
    ??? ??? ? ??. (??? ??? ?? ??? ?? ?? ??)
  • ??(Nutch, http//lucene.apache.org/nutch) ???
    ?? ??? ?? ????? ?? ???, ??? ??? ?? ??? ?? ??.
  • ??(Grub, http//sourceforge.net/projectsgrub)
    ???? ? ?? ?? ????
  • ?????(Herirtix) ??? ????(http//crawler.archive
    .org)?? ???? ??? ???
  • ????(Droids, http//incubator.apache.org/droids)
    ??? ?? ????? ?? ???, ??? ????? ??(??? ???? ???
    ?? ???? ??)? ???? ??.
  • ???(Apertur, http//aperture.sourceforge.net)
    ????? ?????, ??? ?? ??? ???? ???? ???? ??? ?? ??.
  • ?? ?????? ??? ???(Goole Enterprise Connector
    Manaager, http//code.google.com/p/google-enterpri
    se-connector-manager) ????? ?? ?? ??? ???? ???
    ? ? ??? ??? ? ??.

6
7
??(Index)
Chapter 2
8
??(Index)
2-1
??
  • ??? ?? ?? ???? ??? ??? ??? ????? ? ? ?? ??? ????
    ???? ?? ??? ??? ???? ??? ?? ???? ???? ??? ???
    ????? ??? ???? ??? ??? ??? ??? ??? ???, ?? ?? ???
    ???? ??, ?? ??? ?? ??? ?? ?? ??? ??. ?, ?? ??? ??
    ??? ? ?? ?? ???? ? ? ???, ?? ?? ?? ?? ??? ?? ????
    ????.

Architecture
??
HTML
??? ???
?? ??
??? ??
??? ??
??? ??
??
??
8
9
IndexWriter
2-2
??
  • IndexWriter ??? ??? ?? ????? ?? ??? ?? ??? ?????
    ????? ???? ??? ????.
  • IndexWriter ???? ??? ???? ??? ?? ??? IndexWriter
    ???? ??? ??? ????? ?? ? ?? ??.
  • IndexWriter? ??? ??? ??? ????, ??? ???? ???
    Directory ???? ????.

IndexWriter indexWriter new IndexWriter(director
y, new Analyzer(), IndexWriter.MaxFieldLength.UNLI
MITED)
9
10
????
2-1
??
- ?? ?? ?? ???, ??, ?? ?? ??
- addDocument(Document) IndexWriter ? ??? ?
??? ?? ???? ??? ??? ??? ????. -
addDocument(Document, Analyzer) ??? ??? ????
??? ??? ?? ??. ??? ???? ???? ?? ??? ?? ???? ??.
?? ? ? ??? ???? ??? ? ??? ???? ?? ??? ????? ???
?? ? ?? ???? ??.
IndexWriter writer getWriter() Document doc
new Document() writer.addDocment(doc)
??
- ?? ?? ??
  • - deleteDocuments(Term) ???? ??? ?? ???? ?? ???
    ????.
  • - deleteDocuments(Term) ???? ??? ? ? ????
    ???? ?? ??? ????.
  • - deleteDocuments(Query) ???? ??? ??? ???? ??
    ??? ????.
  • - deleteDocuments(Query) ???? ??? ??? ??? ??
    ?? ? ?? ?? ?? ???? ?? ??? ????.
  • - deleteAll() ???? ?? ??? ?? ?? ?? ??? ????.

IndexWriter writer getWriter() Document doc
new Document() writer.deleteDocment(new
Term(id, ???))
10
11
????
2-1
??
- ?? ?? ?? update ??? ?????? delete ? insert
??? ???.
- updateDocument(Term, Document) ???? ??? ???
Term ??? ???? ?? ??? ????, ?? IndexWriter ? ??
??? ???? ??? ??? ??? ????. - updateDocument(Term,
Document, Analyzer) ???? ??? Term ??? ???? ??
??? ????, ??? ??? ???? ??? ??? ??? ????.
IndexWriter writer getWriter() Document doc
new Document() writer.updateDocument(new
Term(id, 1), doc)
11
12
?? ?
2-2
??
  • ?? ??? ??? IndexWriter? ??? ? ?? ??? ?? ??? ??
    ????. ?? ????? ???(write.lock)? ????? ???? ?? ??
    ??? ?? ??? ???.
  • IndexWriter? ????? IndexReader?? ????? ???? ??
    LockObtainFailedException? ???? ??? ??? ?? ????
    ?? ????.
  • ????? LockFactory ???? ???? ??? ???? ???? ?????
    ?? ??? ? ???, ???? ??? ???? ???? ?? ?? ?? ?? ????
    ????? ? ?? ???? ?? ???? ??.

Direcotry ??
NativeFSLockFactory FSDirectory ????? ???? ?? ???, java.nio ???? ?? ?????? ???? ? ??? ????. ??? JVM ? ??? ? ? ??? ?? ??? ??. ??? NFS(NetWork File System)? ??? ?? ???? ?? ??? ???? ?? ???? ??.
SimpleFSLcokFactory ??? File.createNewFile() ???? ??? ? ??? ????, ??? NativeFSLockFactory?? ???? ??? ??? ? ???. ??? ??? ??? JVM? ??? ????? JVM ? ?? ? ? IndexWriter? ??? ?? ???? write.lock ??? ?? ?? ? ??. ??? ? ??? ?? ?? ?? ???? ?? ???? ??.
SingleInstanceLockFactory ?? ??? ?? ????. RAMDirectory? ???? ?? ?? ???? ????. ?? IndexWriter? ??? JVM ??? ??? ?? ??? ??? ? ??.
NoLockFactory ?? ???? ???. ??? ???? ?? ??? ??? ??? ???? ???? ???? ??. ?? ?? ?? ???? ????? RAMDirectory? ???? ? ??? IndexWriter ????? ???? ?? ???? ????? ???? ?? ??.
12
13
?? ???
2-3
??
- ??? ??? ? ?? ??? ??? ????? IndexWriter ????? ??
? ?? ???? ?? ????? ??? ????? ??? ????. ????? ??
??? ??? ? ??? ? ????? ????? ?? ????, ? ????? ??
??? ??? ????. ???? ???? ???? ??? ??? ???, ???
????? ??? ??? ?? ??? ??? ?? ????? ??? ????? ??
??? ???? ? ??. ??? ??? ?? ??? ???????, ?? ????
??? ??.
  • optimize() ??? ????? ??? ??? ?????, ????? ??
    ??? ???? ???.
  • optimize(int maxNumSegments) ?? ?????? ???,
    ????? maxNumSegments ??? ?? ??? ????. ????? ??
    ???? ???? ? ??? ????? ??? ? ??? ?? ???? ??? ??
    ??? ?????? ???? ??? ?? ? ??.
  • optimze(boolean doWait) optimize() ???? ?????,
    doWait ??? false ?? ???? ?? ??? ????? ????? ????
    optimize(boolean doWait) ???? ?? ??? ?? ??? ??? ?
    ??. ?? doWait ??? False ?? ?????
    ConcurrentMergeScheduler ?? ?? ??? ?????? ????
    ????? ???? ??? ??.
  • optimize(int maxNumSegments, boolean doWait)
    ?? ??? ????? ???? ?? ??? ?? ???? ??? ??? ? ??.

IndexWriter writer getWriter() writer.deleteDoc
uments(new Term("id", "1")) writer.optimize()
13
14
???? ??
2-4
??
- ?? ?? 2.9 ?? ?? ?? ? ???? ?? ??? ????. ?????
IndexWriter ? ?? ???? ?? ???? ??? ????.
IndexReader.getReader()
  • ? ???? ???? ??? ???? ?? ?? ??? ??? ??? ?? ??? ??
    ??? ??? ?? ?? IndexReader ????? ????. ?? ?????
    getReader() ???? ?? ???? IndexReader ??? ??? ????
    ???? ??? ??? ????, ?? ????? ??? ????? ?? ?? ???
    ??? ?? ????? ??? ??? ? ??.

14
15
Directory
2-5
??
  • ??? ??? ???? ??? ????.
  • Directory ??? ??? ?? ?????, ??? ??? ??? ??
    Directory ???? ???? ??? ???? ???? ??

Direcotry ??
SimpleFSDirectory ??? ?? ???? ???? ?? ???? Directory ???. Java.io. ???? ??? ???? ??? ????? ??? ??? ???? ??? ????.
NIOFSDirectory ??? ?? ???? ????? java.nio. ???? ??? ????. ??? ????? ???? ??? ???? ??? ?? ???? ???, ??????? ??? ??????? JRE ? ??? ??? ??? ????.
MMapDirectory ??? ? I/O ??? ??? ??? ??? ???? Directory ???. 64?? JRE ? ???? ??? ??? ????, ??? ??? ??? ??? 32?? JRE? ???? ??? ??.
RAMDirectory ?? ??? ???? ???? Directory ?.
FilSwitchDirectory ??? ????? ????, ?? ???? ?? ??? ????? ???? ????.
Directory ramDir new SimpleFDSirectory(otherDir)

15
16
Analyzer
2-6
??
  • ???? ?? ?? ??? ???? ?? ??? ???? ?? ??? ???? ??,
    ?? ??? ???? ?? ????? ??? ??? ??? ?? ??? ????.
  • ??? ???? ??? ?? ??? ???? ?? ?? ??? ???? ?? ???
    ????. (???, ???, ???/??? ??)

??
??
??
??
??
??
??? ??
??
??
16
17
Analyzer
2-6
Field ??
WhitespaceAnalyzer ???? ???? ???? ???? ????, ?? ??? ????? ??? ?? ?? ???. ??? ????? ???? ???.
SimpleAnalyzer ???? ?? ?? ?? ???? ??? ????, ? ??? ?? ???? ????. ?? ??? ??? ?????, ??? ?? ?? ??? ?? ???? ??.
StopAnalyzer SimpleAnalyzer ? ????? StopAnalyzer? ????? ???? ????. ?????? ??? ??? (the. a ??)? ?????, ???? ??? ??? ??? ??? ?? ??.
StandardAnalyzer ???? ??? ????, ??? ??, ??? ?? ?? ??? ??? ???? ??? ????. ??? ??? ???? ?? ???? ????, ???? ????, ?? ??? ?? ????.
Analyzing XYZ Corporation xyz_at_example.com Wh
itespaceAnalyzer XYZ Corporation -
xyz_at_example.com SimpleAnalyzer xy
z corporation xyz example
com StopAnalyzer xy z
corporation xyz example com StandardAnaly
zer xyz corporation
xyz_at_example.com
17
18
Analyzer?? ?? ??
2-6
??
  • ??? ??? ?? ????? ?? ?? ??? ????? ??? ??? ?? ????
    ???? ???.
  • ??? ??? ??? ???? ???? ??? ???, ???? ??? ???? ??
    ??? ?? ? ??? ??? ??? ??? ??? ???? ????? ??.
  • ?? ????? cool, kool, col ? ?? KL? ?????.

Analzer analyzer new MetaphoneReplacementAnalyze
r() Public calss MetaphoneReplacementAnalyzer
extends Analyzer public TokenStream
tokenStream(String fieldName, Reader
reader) return new MetaphoneReplacementFilter(n
ew LetterTokenizer(reader))
18
19
Document
2-7
??
  • Document ???? ?? ??? ????
  • Document ???? ??? ???? ?? ? ? ???, ? ???? ???
    ???, ??? ??, ??? ??? ? ?? ??? ?? ??? ?? ??? ???
  • ??? ?? ??(ex ??, ??, ?? ?)? ??? ?? ?? ??? ???
    ??? ?? ?? ??? ? ??.

Document doc new Document()
Field
??
  • ??? ? ??? ?? ? ? ??? ?? ??? ??? ?? ??? ????, ?
    ??? Field?? ???? ????.
  • ?? ??? ??? ??? ?? ?? ??.
  • ???? ?? ??? ??? ? ??, ??? ???? ??? ??? ?? ?? ???
    ?? ????.

doc.add(new Field(id, 1, Field.Store.YES,
Field.Index.NO))
19
20
Field ??
2-7
???? ??
Field ??
Index.ANALYZED ??? ??? ???? ???? ?? ??? ??? ??? ? ??? ?? ? ? ?? ??.(??, ?? ?)
Index.NOT_ANALYZED ??? ??? ???? ???? ??? ??? ???? ???, ???? ???? ???? ???. ?, ??? ??? ??? ??? ??? ???? ??? ??? ???. ????? URL?? ?? ???? ?? ??, ??, ?? ??, ??????, ???? ?? ???? ?? ??? ???? ? ?? ????.
Index.ANALYZED_NO_NORM Index.ANALYZED? ??? ?????, norm ?? ??? ???? ???. Norm ?? ??? ? ???? ???? ??? ?? ???, ??? ? ???? ? ? ?? ????.
Index.NOT_ANALYZED_NO_NORM Index.ANALYZED? ??? ????? norm ?? ??? ???? ???. ??? ???? ??? ?? ??? ??? ???? ????? ?? ????.
Index.NO ?? ??? ??? ?? ???? ???? ???.
???? ?? ??
Field ??
Store.YES ??? ???? ??? ??? ????. ??? IndexReader? ?? ?? ??? ??? ? ??. ?? ?? ??? ??? ??? ? ??? ?? Store.YES ??? ???? ????
Store.NO ??? ???? ??? ???? ???. Store.NO ??? ?? Index.ANALYZED ??? ?? ????, ??? ??? ?????? ??? ?? ??? ??? ??? ?? ??? ??? ????.(????? ??, ?? ??)
20
21
??
2-8
??
  • IndextingTest.java ??

21
22
??
Chapter 3
23
??
3-1
??
  • ??? ?? ?? ??? ???? ???? ??? ??? ??? ???? ???
    ???.
  • ??? ??? ?? ???? ???? ????? ??.
  • ???? ?? ????? ???? ??? ???? ?? ?? ??? ??? ????
    ?????? ???.

??? ??
IndexSearcher ??? ???? ??? ???? ???. ?? ?? ??? IndexSearcher ????? ???? searcher ???? ?? ????
Query(????? ??) ?? Query ?? ????? ?? ?? ??? ????. IndexSearcher ? search() ???? Query ??? ?? ??? ??? ? ??.
QueryParser ??? ?? ???? ??? ??? ??? ? ?? ??? ??? ??? ??? ?? Query ??? ????.
TopDocs IndexSearcher.search() ????? ??? ?? ? ??? ??? ?? ?? ?? ??? ?? ????.
ScoreDoc TopDocs ???? ?? ?? ?? ??? ???? ???.
?? ?? ???
23
24
IndexSearcher
3-1
??
  • IndexSearcher ???? ??? ?? ???? ?? ????.
  • ?? ???? Query ??? ??? ?? ??? ?? topN? ??? ????
    TopDocs ??? ??? ?? ???.
  • IndexReader ????? ?? ??? ??? ?? ????. ??? ??? ??
    IndexReader? ??? ????? ??, indexReader ? ?? ???
    ?? ????? ??.

Directory dir FSDirectory.open(new
File(/tmp/index)) IndexSearcher searcher new
IndexSearcher(dir) Query q new new
TermQuery(new Term(contents, lucene)) TopDocs
hits searcher.search(q, 10) Searcher.close()
IndexReader newReader reader.reopen()
IndexSearcher
Query
TopDocs
IndexReader
Directory
??
24
25
QueryParser ??? ??
3-1
??
  • ???? ??? mock OR junit ?? ??? ??? ??? ??? ???
    Query ??? ????? ???. mock OR junit ????
    QueryPaser? ???? ??? ? ??? ?? ?? ??? ?? ??? ?? ??.

Query ??
QueryParser
???
IndexSearcher
??? ????
Analyzer
  • QueryParser ? ?? ???? ??? ??? ??? ???? ???? ????
    Query ??? ????.

QueryParser parser new QueryParser(Version.LUCEN
E_30, contents, new SimpleAnalyzer()) Query
query1 parser.parse(JUNIT ANT
-MOCK) Query query2 parser.parse(mock OR
junit) TopDocs doc searcher.search(query1,
10) TopDocs doc searcher.search(query2, 10)
25
26
??? ??? ??
3-1
??
  • TermQuery ????? ???? ??? ?? ???? Query, ?????
    ????.

Term t new Term(isbn, 908043980924) Query
query new TermQuery(t) TopDocs docs
search.search(query, 10)
  • TermRangeQuery ??? ??? ?? ??, ???? ?? ?? ??
    ?? ?? ??? ????? ?? ?? ? ???, ??? ?? ??? ??.(ex
    ????? ???? ?)

//true ? ???? ???? ??? ??? ??? ??? ????
?? TermRangeQuery query new TermRangeQuery(titl
e, d, j, true, true) TopDocs docs
search.search(query, 100)
26
27
??? ??? ??
3-1
??
  • NumericRangeQuery ??? ??? ??? ??? ??? ? ???,
    ??? ?? ?? ??? ??? ?? ??? ????? ?? ??? ???
    TermRangeQuery ?? ??? ?? ???

//true ? ???? ???? ??? ??? ??? ??? ????
?? NumericRangeQuery query new
NumericRangeQuery(month, 200605, 200609, true,
true) TopDocs docs search.search(query, 100)
  • PrefixQuery ??? ???? ???? ?? ?? ?? ?? ???
    ????. ???? ??? ??? ????.

Term term new Term (category,
/technology/computers/programming) PrefixQuery
query new PrefixQuery(term) TopDocs docs
search.search(query, 100)
27
28
??? ??? ??
3-1
??
  • BooleanQuery ??? ??? ??? ?? BooleanQuery? ??
    ??? ??? ?? ??? ? ??. BooleanQuery ?? ???? ? ???
    ???? ???.

TermQuery searchingBooks new TermQuery(new
Term("subject","search")) Query books2010
NumericRangeQuery.newIntRange("pubmonth", 201001,
201012, true, true) BooleanQuery
searchingBooks2010 new BooleanQuery()
searchingBooks2010.add(searchingBooks,
BooleanClause.Occur.MUST) searchingBooks2010.add
(books2010, BooleanClause.Occur.MUST) /
BooleanClause.Occur.MUST ??? ??? ??
BooleanClause.Occur.SHOULD ??? ??? ???? ??,
???? ???? ????? ???? ?? BooleanClause.Occur.MUS
T_NOT ??? ??? ???? ??? ???? ?? /
  • WildcardQuery ??? ??? ??? ???? ??? ??? ??.
    ??? ??? ??? ??? ?? ??? ?? ??? ????, ? ??????
    ??? ??? ??? ??? ????. ???? ??? ??? ???? ??? ?? ??
    ???? ?? ??? ??? ????.

Query query new WildcardQuery(new
Term(contents, ?ild)) TopDocs docs
search.search(query, 100)
28
29
??? ??? ??
3-1
??
  • FuzzyQuery ??? ??? ??? ??? ??? ????. ????? ??
    ????? ??? ??? ??? ??? ?? ??? ??? ???? ??? ????
    ????. ??? ?? ?? ???? ????? ????? ??? ???? ?????
    ??.
  • (http//en.wikipedia.org/wiki/Levenshtein_Distance
    )

Query query new FuzzyQuery(new Term(contents,
wuzza)) TopDocs docs search.search(query,
100)
  • MatchAllDocsQuery ??? ???? ?? ??? ?? ??? ????.
    ?? ???? ?? ?? ??? ? ??? ??? ?? ??? ??? ????. ???
    ?? ??? ??? ???? ???? ?? ??? ??? ???? ???? ?? ??.

Query query new MatchALLDocsQuery(field) TopDoc
s docs search.search(query, 100)
29
30
??? ??
3-1
??
  • ?? ???? ??? ???? ??? ??? ??? ?? ??? ??? ??? ????
    ????? ??? ????.
  • ??? ??? ??? ??? ????? ??? ??? ???, ??? ?? ??
    ???? ?? ? ? ??.
  • ??? ??? ??(q)? ?(t), ??(d)? ???? ????
  • explain() ???? ?? ?? ??? ?? ? ? ??

?? ??
tf(t in d) ??(d)? ?(t)? ?? ? ???(TF, TermFrequency), ? ?? ???? ?? ???? ?????? ???.
Idf(t) ?? ?? ??? ???(IDF, Inverse Document Frequency), ?? ??? ?????? ????. ???? ??? ????? idf ?? ??
boost(t.field in d) ??? ? ???? ??? ??? ??? ???. ???? ???? ?? ??? ??? ?? ?? ??? ??? ? ?? ??? ??? ???
lengthNorm(t.field in d) V?? ?? ?? ?? ??? ???? ???. ? ?? ????? ???? ??? ?? ??? ????. ? ???? ?? ?? ??? ??? ?? ??? ? ?? ??? ??? ???.
coord(q, d) ??? ??? ? ? ?? ??? ??? ?? ??? ?? ???? ??(coordination) ????. ?? ??? ?? ????? ??? ???? ?? ? ?? ???? ?? ??? ? ?? ??? ??? ???
queryNorm(q) ??? ? ??? ???? ?? ?? ???? ???.
30
31
??
2-5
??
  • Searcher.java ??

31
32
?????.
33
????
??
  • ???? ????
  • - http//lucene.apache.org/
  • - http//www.acornpub.co.kr/book/lucene-2nd
  • - http//www.itworld.co.kr/news/78212
  • - http//cafe.naver.com/korlucene

33
Write a Comment
User Comments (0)
About PowerShow.com