현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - < p>Lucene 사이트 전역 검색의 예

< p>Lucene 사이트 전역 검색의 예

< /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.}

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.}

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