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