view 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 source

package de.mpiwg.dwinter.fulltextSearchServer.searchThreads;

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 String searchString;
	private String ticket;
	private String lang;
	private IFulltextSearchDocsLines[] fulltextSearcher;
	private Logger logger;
	private String searchMetaData;

	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();
	}

	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);

					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();
			}
		}
	}
}