diff 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
line wrap: on
line diff
--- a/src/de/mpiwg/dwinter/fulltextSearchServer/searchThreads/SearchInlinesThread.java	Wed Nov 03 12:18:46 2010 +0100
+++ b/src/de/mpiwg/dwinter/fulltextSearchServer/searchThreads/SearchInlinesThread.java	Wed Jan 26 14:41:34 2011 +0100
@@ -2,79 +2,122 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URLDecoder;
 
 import org.apache.log4j.Logger;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.Term;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.store.LockObtainFailedException;
 import org.apache.lucene.util.Version;
 
 import de.mpiwg.dwinter.fulltext.search.FulltextSearchDocsLines;
+import de.mpiwg.dwinter.fulltext.search.IFulltextSearchDocsLines;
+import de.mpiwg.dwinter.fulltext.search.xmlsearchadapter.XMLSearchServerAdapter;
+import de.mpiwg.dwinter.fulltext.searcher.LanguageSearcher;
 
 public class SearchInlinesThread extends Thread {
 
-	//private File docIndex;
-	//private File lineDir;
+	// private File docIndex;
+	// private File lineDir;
 	private String searchString;
 	private String ticket;
 	private String lang;
-	private FulltextSearchDocsLines fulltextSearcher;
+	private IFulltextSearchDocsLines[] fulltextSearcher;
 	private Logger logger;
 	private String searchMetaData;
-	
-	public SearchInlinesThread(FulltextSearchDocsLines fulltextSearcher, String searchString, String searchMetaData,String lang, String ticket){
-		//this.docIndex = docIndex;
-		//this.lineDir = lineDir;
+
+	public SearchInlinesThread(IFulltextSearchDocsLines[] fulltextSearcher,
+			String searchString, String searchMetaData, String lang,
+			String ticket) {
+		// this.docIndex = docIndex;
+		// this.lineDir = lineDir;
 		this.fulltextSearcher = fulltextSearcher;
 		this.searchString = searchString;
 		this.searchMetaData = searchMetaData;
-		this.ticket=ticket;
-		this.lang =lang;
-		
-		
-		this.logger=Logger.getRootLogger();
+		this.ticket = ticket;
+		this.lang= lang;
+		this.logger = Logger.getRootLogger();
 	}
-	public void run(){
-		String text;
-		
-		
-		FulltextSearchDocsLines fulltextSearcher;
-		try {
-			//fulltextSearcher = new FulltextSearchDocsLines(docIndex,lineDir);
-		
+
+	public void run() {
+		// String text;
+
+		for (int i = 0; i < fulltextSearcher.length; i++) {
+			IFulltextSearchDocsLines currentSearcher = fulltextSearcher[i];
+
+			// IFulltextSearchDocsLines fulltextSearcher;
+			try {
+				// fulltextSearcher = new
+				// FulltextSearchDocsLines(docIndex,lineDir);
+				Query query = null;
+				if (FulltextSearchDocsLines.class.isInstance(currentSearcher)) {// lucenebased
+																				// searcher
+					FulltextSearchDocsLines ftsdl = (FulltextSearchDocsLines) currentSearcher;
+
+					
+					LanguageSearcher ls = ftsdl.languageSearchers
+					.getSearcherByLanguage(lang);
+					
+					if(ls==null) // language not supported
+						continue;
+					
+					Analyzer analyzer = ls.analyzer;
+					QueryParser parser = new QueryParser(Version.LUCENE_30,
+							"contents", analyzer);
+					logger.debug(searchString);
+					query = parser.parse(searchString);
 
-		Analyzer analyzer = this.fulltextSearcher.languageSearchers.getSearcherByLanguage(lang).analyzer;
-		QueryParser parser = new QueryParser(Version.LUCENE_30,"contents",analyzer);
-		logger.debug(searchString);
-		Query query= parser.parse(searchString);
-		
-		if ((searchMetaData!=null) && !searchMetaData.equals("")){
-			QueryParser parserMD = new QueryParser(Version.LUCENE_30,"dcMetaData",analyzer);
-			Query queryMD= parserMD.parse(searchMetaData);
-			BooleanQuery booleanQuery = new BooleanQuery();
-			booleanQuery.add(queryMD, BooleanClause.Occur.MUST);
-			booleanQuery.add(query, BooleanClause.Occur.MUST);
-			
-			query = booleanQuery;
-		}
-		this.fulltextSearcher.searchInLinesToDir(query,lang,ticket);
-		} catch (CorruptIndexException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LockObtainFailedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (ParseException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+					if ((searchMetaData != null) && !searchMetaData.equals("")) {
+						QueryParser parserMD = new QueryParser(
+								Version.LUCENE_30, "dcMetaData", analyzer);
+						Query queryMD = parserMD.parse(searchMetaData);
+						BooleanQuery booleanQuery = new BooleanQuery();
+						booleanQuery.add(queryMD, BooleanClause.Occur.MUST);
+						booleanQuery.add(query, BooleanClause.Occur.MUST);
+
+						query = booleanQuery;
+					}
+				} else if (XMLSearchServerAdapter.class
+						.isInstance(currentSearcher)) {
+					
+					if (!XMLSearchServerAdapter.getSupportedLanguages().contains(lang)){
+						continue; // language not supported
+					}
+					Term t = new Term("contents", searchString);
+					query = new TermQuery(t);
+
+					if ((searchMetaData != null) && !searchMetaData.equals("")) {
+						Term t2 = new Term("dcMetaData", searchMetaData);
+						Query query2 = new TermQuery(t2);
+
+						BooleanQuery booleanQuery = new BooleanQuery();
+						booleanQuery.add(query2, BooleanClause.Occur.MUST);
+						booleanQuery.add(query, BooleanClause.Occur.MUST);
+
+						query = booleanQuery;
+					}
+				}
+				currentSearcher.searchInLinesToDir(query, lang, ticket);
+			} catch (CorruptIndexException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (LockObtainFailedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (ParseException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
 	}
 }