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