< /p>
인터넷에서 찾는 것이 도움이 되는지 모르겠다. < /p>
Lucene 은 여러 개의 인덱스 디렉토리를 동시에 저장할 수 있도록 지원합니다. 우리가 걱정할 수 있는 문제는 인덱스화 과정에서 여러 색인 디렉토리에 분산되어 저장되어 검색 시 글로벌 상관 관계 계산 점수를 얻을 수 있는지 여부입니다. 실제로 Lucene 의 ParallelMultiSearcher 와 MultiSearcher 는 글로벌 점수 계산을 지원합니다. 즉, 색인이 여러 색인 디렉토리에 분산되어 있지만 < /p>
인덱스 디렉토리 처리 < /p>
다음은 a~z 의 26 개 디렉토리에 인덱스를 무작위로 배포하고 인덱스 및 검색 프로그램을 구현하여 Lucene 점수 계산을 검증합니다.
< /p>
먼저 색인 카탈로그를 작성하고 검색을 처리하는 도구 클래스를 구현합니다. 코드는 다음과 같습니다.
1. packageorg.shirdrn.lucene;
2.
3. import java.io.file;
4. import java.io.ioexception;
5. import java.util.arraylist;
6.import java.util.hashmap;
7. import java.util.iterator;
8. import java.util.list;
9. import java.util.map;
10.import java.util.random;
11.import java.util.concurrent.locks.lock;
12.import java.util.concurrent.locks.reentrantlock;
13.
14.importorg.apache.lucene.index.corruptindexexception;
15.importorg.apache.lucene.index.indexwriter;
16.importorg.apache.lucene.index.indexwriterconfig;
17.importorg.apache.lucene.index.indexwriter.maxfieldlength;
18.importorg.apache.lucene.search.defaultsimilarity;
19.importorg.apache.lucene.search.indexsearcher;
20.importorg.apache.lucene.search.searchable;
21.importorg.apache.lucene.search.similarity;
22.importorg.apache.lucene.store.fs directory;
23.importorg.apache.lucene.store.lockobtainfailedexception;
24.importorg.shirdrn.lucene.multipleindexing.indexwriterobj;
25.
26./* *
27. * indexing accross multiple Lucene ii @ date2011-12-12
31. */
32. public classindexh
El per {
33.
34. private static writer helper writer helper = null;
35. private static searcher helper searcher helper = null;
36.
37. public static writer helper newwriterhelper (string root, indexwriter)
39.}
40.
41. public static searcher helper newsearcherher Indexwriter config index config) {
42. return searcher helper.new instance (root, index config)
43.}
44.
45. protectedstatic class writer helper {<
47. private locklocker = new reentrant lock ();
48. private string index rootdir = null;
49. private indexwriter config index config;
50. private maplt; Character, IndexWriterObjgt;; Indexwriters = newhashmaplt; Character, IndexWriterObjgt;; ();
51. private static random random = new random ();
52. privatewriterhelper () {
53.
54.} P >
55. private synchronized static writer helper new instance (string root, Indexwriter config index config) {
56.if (writer helper = = null) {
57
= newwriterhelper ();
58. writerhelper.indexrootdir = root;
59. writerhelper.indexconfig = indexconfig;
60.}
61. return writer helper;
62.}
63. public indexwriter obj select indexwriter () {
65.charch = alphabet.charat (pos);
66.stringdir = new string (new char [] {ch});
67.locker.lock ();
68.try {
69.filepath = new file (인덱스 루트, dir); < /p>
70. if (! Path.exists ()) {
71.path.mkdir (); < /p>
72.}
73. if (! Indexwriters.containskey (ch)) {
74. indexwriterindexwriter = new indexwriter (fs direr < /p>
75. indexWriters.put(ch, new IndexWriterObj(indexWriter, dir)););
76.}
77.} catch (corruptindexexception e) {
78]
79.} catch (lockobtainfailedexception e) {
80.e. print stacktrace
81 ..} catch (입출력 exception e) {
82.
E. printstacktrace ();
83.} finally {
84.locker.unlock ();
85.}
86. return index writers.get (ch);
87.}
88. @ suppress warnings ("설명")
; Map.Entrylt;; Character, IndexWriterObjgt;; Gt; Iter = indexwriters.entryset (). iterator ();
91.while (iter.hasnext ()) {
92.map.entrylt; Character, IndexWriterObjgt;; Entry = iter.next ();
93.try {
94.if (자동 최적화) {
95.entry]
96.}
97.entry.getvalue (). indexwriter.close ();
98.} catch (corruptindexexception e) {
99.e.printstacktrace ())
100 ..} catch (입출력 실행 e) {
101.e.print stacktrace ();
102.}
103.}
104.}
105.} P >
107.protectedstatic classsearcher helper {
108.privatelistlt; IndexSearchergt;; Searchers = new ArrayListlt;; IndexSearchergt;; ();
109. private similarity similarity
= new default similarity ();
110.private searcher helper () {
111.
112.} P >
113. private synchronized static searcher helper new instance (string root, Indexwriter config index config) {
114.if (searcher helper = = null) {
116.if (indexconfig.getsimilarity ()! = null) {
117.searcherhelper.similarity = indexconfig.getsimilarity ();
118.}
119.file index root = new file (루트);
120.file [] files = indexroot.listfiles ();
121.for (파일 f: 파일) {
122.indexsearcher searcher = null;
123.try {
124.searcher = new indexsearcher (fsdirectory.open (f
125.} catch (corruptindexexception e) {
126.e. printstacktrace (
127.} catch (입출력 실행 e) {
128.e.print stacktrace ();
129.}
130.if (searcher! = null) {
131.searcher.setsimilarity (searcherhelper.similarity); < /p>
132. searcherHelper
. searchers.add (searcher);
133.}
134.}
135.}
136.r
137.}
138.public voidcloseall () {
139.iterator IndexSearchergt;; Iter = searchers.iterator ();
140.while (iter.hasnext ()) {
141.try {
143.} catch (입출력 실행 e) {
144.e.print stacktrace ();
145.}
146.}
147.}
148.pp P >
149.searchable [] a = new searchable [searchers.size ()];
150. return searchers. to array (a);
151.}
152.}
153.}
인덱스할 때 우리는 로그를 통해 실제 데이터의 분포를 쉽게 볼 수 있도록 각 IndexWriter 의 이름으로 a~z 라는 26 자를 기록하여 IndexWriter 및 디렉토리 이름을 IndexWriterObj 클래스의 객체에 래핑했습니다. Lucene Document 빌드를 할 때 이 인덱스 디렉토리의 이름 (a~z 문자 중 하나) 을 Field 로 만듭니다. 인덱스화할 때 값을 인덱스화할 해당 IndexWriter 인스턴스를 자동으로 선택하려면 IndexHelper.WriterHelper 의 selectIndexWriter () 메서드를 호출해야 합니다. < /p>
검색 시 IndexHelper.SearcherHelper 도구를 통해 여러 Searchable 인스턴스의 배열을 가져옵니다. getSearchers () 를 호출하면 MultiSearcher 에 제공됩니다 < /p>
본 문장 출처 Linux community 웹 사이트 (www.linuxidc.com) 원본 링크: /Linux/2012-05/59757.htm
갤가메, 왜 그래