I am use RMI search two server date! When I use one TermQuery return 30ms (very
good)! But when I use booleanQuery add tow termQuery return must 150 ms :(
And three is 250 ms? My query have 13 TermQuery! Return cost 7500 ms .
How can I do it quick! Use ICE(Internet Communications Engine) ZeroC ?
/*
* Created on Sep 8, 2005
*/
package com.feedsky.search.client;
import java.io.IOException;
import java.rmi.Naming;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.MultiSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RemoteSearchable;
import org.apache.lucene.search.Searchable;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.BooleanClause.Occur;
import com.feedsky.search.conf.ServerInfo;
import com.feedsky.search.conf.ServerInfoReader;
public class RemoteLuceneConnector {
private RemoteSearchable[] remoteSearchers;
public RemoteLuceneConnector(){
makeRemoteSearchables();
}
public static void main(String[] args) {
RemoteLuceneConnector rlc= new RemoteLuceneConnector();
RemoteSearchable[] rs= rlc.getRemoteSearchers();
try {
MultiSearcher multi = new MultiSearcher(rs);
long startTime =System.currentTimeMillis();
long runtime =0;
for (int i = 0; i < 10000; i++) {
BooleanQuery query=new BooleanQuery();
TermQuery termQuery=new TermQuery(new
Term("itemContent","中国"));
query.add(termQuery,Occur.MUST);
TermQuery termQuery1=new TermQuery(new
Term("itemContent","美国"));
query.add(termQuery1,Occur.MUST);
TermQuery termQuery2=new TermQuery(new
Term("itemContent","你好"));
query.add(termQuery2,Occur.MUST);
TermQuery termQuery3=new TermQuery(new
Term("itemContent","日本"));
query.add(termQuery3,Occur.MUST);
TermQuery termQuery4=new TermQuery(new
Term("itemContent","中国"));
query.add(termQuery4,Occur.MUST);
TermQuery termQuery5=new TermQuery(new
Term("itemContent","天下"));
query.add(termQuery5,Occur.MUST);
TermQuery termQuery6=new TermQuery(new
Term("itemContent","系列"));
query.add(termQuery6,Occur.MUST);
TermQuery termQuery7=new TermQuery(new
Term("itemContent","你好"));
query.add(termQuery7,Occur.MUST);
TermQuery termQuery8=new TermQuery(new
Term("itemContent","中国"));
query.add(termQuery8,Occur.MUST);
TermQuery termQuery9=new TermQuery(new
Term("itemContent","中国"));
query.add(termQuery9,Occur.MUST);
TermQuery termQuery10=new TermQuery(new
Term("itemContent","韩国"));
query.add(termQuery10,Occur.MUST);
TermQuery termQuery11=new TermQuery(new
Term("itemContent","新加坡"));
query.add(termQuery11,Occur.MUST);
TermQuery termQuery12=new TermQuery(new
Term("itemContent","台湾"));
query.add(termQuery12,Occur.MUST);
TermQuery termQuery13=new TermQuery(new
Term("itemContent","中国"));
query.add(termQuery13,Occur.MUST);
//System.out.println(query.toString());
QueryParser qp = new
QueryParser("itemContent", new SimpleAnalyzer());
try {
Query query2 =
qp.parse(query.toString());
} catch (ParseException e) {
// TODO Auto-generated catch
block
e.printStackTrace();
}
runtime=System.currentTimeMillis();
Hits hits = multi.search(query);
System.out.println("hits length =
"+hits.length());
System.out.println("runtime
="+(System.currentTimeMillis()-runtime));
}
long endTime =System.currentTimeMillis();
System.out.println("endTime = "+(endTime -
startTime));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(rs);
}
/**
* <p>create remoteSearchables
*/
private synchronized void makeRemoteSearchables(){
ServerInfoReader serverInfoReader = new ServerInfoReader();
ArrayList searcherList = serverInfoReader.getNameList();
if (searcherList!=null) System.out.println("Number of Machines=" +
searcherList.size());
Vector v = new Vector();
//int index=0;
for ( Iterator i=searcherList.iterator(); i.hasNext(); )
{
ServerInfo serverInfo = (ServerInfo)i.next();
String machinename= "//" + serverInfo.getIpAddr() + ":" +
serverInfo.getPortNum() + "/searchable";
//String machinename= "//" + serverInfo.getIpAddr() + ":" +
serverInfo.getPortNum() + "/luceneindex";
System.out.println("Machine: " + machinename);
try{
Searchable s = (Searchable)Naming.lookup(machinename);
RemoteSearchable searcher = new RemoteSearchable(s);
v.add(searcher);
}catch(Exception ee){
ee.printStackTrace();
System.out.println("Exception in getting Remote Object: " +
ee.getMessage());
}
}
remoteSearchers = new RemoteSearchable[v.size()];
for(int i = 0; i < remoteSearchers.length; i++)
remoteSearchers[i] = (RemoteSearchable)v.get(i);
}
public RemoteSearchable[] getRemoteSearchers(){
makeRemoteSearchables();
return remoteSearchers;
}
}
Thank you very much !
xiaojun tong
010-64489518-613
[EMAIL PROTECTED]
www.feedsky.com