comparison src/de/mpiwg/dwinter/fulltextSearchServer/searchThreads/SearchInlinesThread.java @ 1:83e9a828e794

Version mit integrierter Suche ?ber XML-Volltexte
author dwinter
date Wed, 26 Jan 2011 14:41:34 +0100
parents db87c1b7eb6d
children
comparison
equal deleted inserted replaced
0:db87c1b7eb6d 1:83e9a828e794
1 package de.mpiwg.dwinter.fulltextSearchServer.searchThreads; 1 package de.mpiwg.dwinter.fulltextSearchServer.searchThreads;
2 2
3 import java.io.File; 3 import java.io.File;
4 import java.io.IOException; 4 import java.io.IOException;
5 import java.net.URLDecoder;
5 6
6 import org.apache.log4j.Logger; 7 import org.apache.log4j.Logger;
7 import org.apache.lucene.analysis.Analyzer; 8 import org.apache.lucene.analysis.Analyzer;
8 import org.apache.lucene.index.CorruptIndexException; 9 import org.apache.lucene.index.CorruptIndexException;
10 import org.apache.lucene.index.Term;
9 import org.apache.lucene.queryParser.ParseException; 11 import org.apache.lucene.queryParser.ParseException;
10 import org.apache.lucene.queryParser.QueryParser; 12 import org.apache.lucene.queryParser.QueryParser;
11 import org.apache.lucene.search.BooleanClause; 13 import org.apache.lucene.search.BooleanClause;
12 import org.apache.lucene.search.BooleanQuery; 14 import org.apache.lucene.search.BooleanQuery;
13 import org.apache.lucene.search.Query; 15 import org.apache.lucene.search.Query;
16 import org.apache.lucene.search.TermQuery;
14 import org.apache.lucene.store.LockObtainFailedException; 17 import org.apache.lucene.store.LockObtainFailedException;
15 import org.apache.lucene.util.Version; 18 import org.apache.lucene.util.Version;
16 19
17 import de.mpiwg.dwinter.fulltext.search.FulltextSearchDocsLines; 20 import de.mpiwg.dwinter.fulltext.search.FulltextSearchDocsLines;
21 import de.mpiwg.dwinter.fulltext.search.IFulltextSearchDocsLines;
22 import de.mpiwg.dwinter.fulltext.search.xmlsearchadapter.XMLSearchServerAdapter;
23 import de.mpiwg.dwinter.fulltext.searcher.LanguageSearcher;
18 24
19 public class SearchInlinesThread extends Thread { 25 public class SearchInlinesThread extends Thread {
20 26
21 //private File docIndex; 27 // private File docIndex;
22 //private File lineDir; 28 // private File lineDir;
23 private String searchString; 29 private String searchString;
24 private String ticket; 30 private String ticket;
25 private String lang; 31 private String lang;
26 private FulltextSearchDocsLines fulltextSearcher; 32 private IFulltextSearchDocsLines[] fulltextSearcher;
27 private Logger logger; 33 private Logger logger;
28 private String searchMetaData; 34 private String searchMetaData;
29 35
30 public SearchInlinesThread(FulltextSearchDocsLines fulltextSearcher, String searchString, String searchMetaData,String lang, String ticket){ 36 public SearchInlinesThread(IFulltextSearchDocsLines[] fulltextSearcher,
31 //this.docIndex = docIndex; 37 String searchString, String searchMetaData, String lang,
32 //this.lineDir = lineDir; 38 String ticket) {
39 // this.docIndex = docIndex;
40 // this.lineDir = lineDir;
33 this.fulltextSearcher = fulltextSearcher; 41 this.fulltextSearcher = fulltextSearcher;
34 this.searchString = searchString; 42 this.searchString = searchString;
35 this.searchMetaData = searchMetaData; 43 this.searchMetaData = searchMetaData;
36 this.ticket=ticket; 44 this.ticket = ticket;
37 this.lang =lang; 45 this.lang= lang;
38 46 this.logger = Logger.getRootLogger();
39
40 this.logger=Logger.getRootLogger();
41 } 47 }
42 public void run(){
43 String text;
44
45
46 FulltextSearchDocsLines fulltextSearcher;
47 try {
48 //fulltextSearcher = new FulltextSearchDocsLines(docIndex,lineDir);
49
50 48
51 Analyzer analyzer = this.fulltextSearcher.languageSearchers.getSearcherByLanguage(lang).analyzer; 49 public void run() {
52 QueryParser parser = new QueryParser(Version.LUCENE_30,"contents",analyzer); 50 // String text;
53 logger.debug(searchString); 51
54 Query query= parser.parse(searchString); 52 for (int i = 0; i < fulltextSearcher.length; i++) {
55 53 IFulltextSearchDocsLines currentSearcher = fulltextSearcher[i];
56 if ((searchMetaData!=null) && !searchMetaData.equals("")){ 54
57 QueryParser parserMD = new QueryParser(Version.LUCENE_30,"dcMetaData",analyzer); 55 // IFulltextSearchDocsLines fulltextSearcher;
58 Query queryMD= parserMD.parse(searchMetaData); 56 try {
59 BooleanQuery booleanQuery = new BooleanQuery(); 57 // fulltextSearcher = new
60 booleanQuery.add(queryMD, BooleanClause.Occur.MUST); 58 // FulltextSearchDocsLines(docIndex,lineDir);
61 booleanQuery.add(query, BooleanClause.Occur.MUST); 59 Query query = null;
62 60 if (FulltextSearchDocsLines.class.isInstance(currentSearcher)) {// lucenebased
63 query = booleanQuery; 61 // searcher
64 } 62 FulltextSearchDocsLines ftsdl = (FulltextSearchDocsLines) currentSearcher;
65 this.fulltextSearcher.searchInLinesToDir(query,lang,ticket); 63
66 } catch (CorruptIndexException e) { 64
67 // TODO Auto-generated catch block 65 LanguageSearcher ls = ftsdl.languageSearchers
68 e.printStackTrace(); 66 .getSearcherByLanguage(lang);
69 } catch (LockObtainFailedException e) { 67
70 // TODO Auto-generated catch block 68 if(ls==null) // language not supported
71 e.printStackTrace(); 69 continue;
72 } catch (IOException e) { 70
73 // TODO Auto-generated catch block 71 Analyzer analyzer = ls.analyzer;
74 e.printStackTrace(); 72 QueryParser parser = new QueryParser(Version.LUCENE_30,
75 } catch (ParseException e) { 73 "contents", analyzer);
76 // TODO Auto-generated catch block 74 logger.debug(searchString);
77 e.printStackTrace(); 75 query = parser.parse(searchString);
76
77 if ((searchMetaData != null) && !searchMetaData.equals("")) {
78 QueryParser parserMD = new QueryParser(
79 Version.LUCENE_30, "dcMetaData", analyzer);
80 Query queryMD = parserMD.parse(searchMetaData);
81 BooleanQuery booleanQuery = new BooleanQuery();
82 booleanQuery.add(queryMD, BooleanClause.Occur.MUST);
83 booleanQuery.add(query, BooleanClause.Occur.MUST);
84
85 query = booleanQuery;
86 }
87 } else if (XMLSearchServerAdapter.class
88 .isInstance(currentSearcher)) {
89
90 if (!XMLSearchServerAdapter.getSupportedLanguages().contains(lang)){
91 continue; // language not supported
92 }
93 Term t = new Term("contents", searchString);
94 query = new TermQuery(t);
95
96 if ((searchMetaData != null) && !searchMetaData.equals("")) {
97 Term t2 = new Term("dcMetaData", searchMetaData);
98 Query query2 = new TermQuery(t2);
99
100 BooleanQuery booleanQuery = new BooleanQuery();
101 booleanQuery.add(query2, BooleanClause.Occur.MUST);
102 booleanQuery.add(query, BooleanClause.Occur.MUST);
103
104 query = booleanQuery;
105 }
106 }
107 currentSearcher.searchInLinesToDir(query, lang, ticket);
108 } catch (CorruptIndexException e) {
109 // TODO Auto-generated catch block
110 e.printStackTrace();
111 } catch (LockObtainFailedException e) {
112 // TODO Auto-generated catch block
113 e.printStackTrace();
114 } catch (IOException e) {
115 // TODO Auto-generated catch block
116 e.printStackTrace();
117 } catch (ParseException e) {
118 // TODO Auto-generated catch block
119 e.printStackTrace();
120 }
78 } 121 }
79 } 122 }
80 } 123 }