You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by "Su.Cheng" <su...@playstarmusic.com> on 2007/05/23 21:52:47 UTC
Who has sample code of remote multiple servers multiple indexes
searching?
Hi,
I studied "5.6 Searching across multiple Lucene indexes 178" in <<Lucene
in action>>.
I have 2 remote serarch computers(SearchServer) work as index servers
and search requests from a search client(SearchClient,the 3rd
computer).
An error message, "Exception in thread "main"
java.rmi.UnmarshalException", was thrown out.
Does someone can explain with sample code about multiple-index servers
and multiple indexes in single server?
Thanks.
Below are the source code:
////////////////SearchServer.java/////////////////////
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ParallelMultiSearcher;
import org.apache.lucene.search.RemoteSearchable;
import org.apache.lucene.search.Searchable;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.MultiSearcher;
import java.io.File;
import java.io.IOException;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class SearchServer {
private static final String m_disk1="/usr/local/eBingBong/"; //English
private static final String m_disk2="/backup/eBingBong/"; //other
languages
private static Searchable []m_searchables;
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("Usage: SearchServer <IP>");
System.err.println("java -Xms1000m -Xmx2000m SearchServer 161");
System.exit(-1);
}
FindIndex();
LocateRegistry.createRegistry(1099);
Searcher multiSearcher = new MultiSearcher(m_searchables);
RemoteSearchable multiImpl = new RemoteSearchable(multiSearcher);
//Naming.rebind("//192.168.10.175/LIA_Multi", multiImpl);
Naming.rebind("//192.168.10." +args[0] + "/LIA_Multi", multiImpl);
Searcher parallelSearcher = new ParallelMultiSearcher
(m_searchables);
RemoteSearchable parallelImpl = new RemoteSearchable
(parallelSearcher);
//Naming.rebind("//192.168.10.175/LIA_Parallel", parallelImpl);
Naming.rebind("//192.168.10." + args[0] + "/LIA_Parallel",
parallelImpl);
System.out.println("Server started");
}
private static void FindIndex()
{
File []file=new File[10];
File tmpFile;
int i=0;
tmpFile=new File(m_disk1,"english"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"chinese"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"japanese"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"korean"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"czech"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"german"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"greek"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"french"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"dutch"); if(tmpFile.exists()) file[i+
+]=tmpFile;
tmpFile=new File(m_disk2,"russian"); if(tmpFile.exists()) file[i+
+]=tmpFile;
m_searchables = new Searchable[i];
for (int j = 0; j < i; j++)
{
try
{
m_searchables[j] = new IndexSearcher(file[j].getAbsolutePath());
}
catch(IOException e) {}
System.out.println(file[j].getAbsolutePath());
}
}
}
/////////////////////////SearchClient.java///////////////////////
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.MultiSearcher;
import org.apache.lucene.search.ParallelMultiSearcher;
import org.apache.lucene.search.Searchable;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.search.Query;
import org.apache.lucene.queryParser.QueryParser;
import java.rmi.Naming;
import java.util.Date;
import java.util.HashMap;
public class SearchClient {
private static HashMap searcherCache = new HashMap();
private static String[] m_args;
public static void main(String[] args) throws Exception {
m_args=args;
if (args.length < 2) {
System.err.println("Usage: SearchClient <query> <IP1> <IP2>
<...>");
System.err.println("java -Xms1000m -Xmx2000m SearchClient oil 161
163");
System.exit(-1);
}
String word = args[0];
// warm up the VM with several of each search
for (int i=0; i < 5; i++) {
search("LIA_Multi", word);
search("LIA_Parallel", word);
}
}
private static void search(String name, String word)
throws Exception {
//TermQuery query = new TermQuery(new Term("contents",
word));//content //contents
QueryParser parser=new QueryParser("content",new StandardAnalyzer
());
//parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = parser.parse(word);
System.out.println(query.toString());
//MultiSearcher searcher = (MultiSearcher) searcherCache.get
(name);
ParallelMultiSearcher searcher = (ParallelMultiSearcher)
searcherCache.get(name);
if (searcher == null)
{
int serverSum=m_args.length-1;
Searchable []remoteSearch=new Searchable[serverSum];
//remoteSearch[0]=lookupRemote("//192.168.10.156/",name);
//remoteSearch[1]=lookupRemote("//192.168.10.175/",name);
for(int suc=0; suc<serverSum; suc++) remoteSearch[suc]=lookupRemote
("//192.168.10."+m_args[suc+1]+"/",name);
//searcher = new MultiSearcher(remoteSearch);
searcher = new ParallelMultiSearcher(remoteSearch);
searcherCache.put(name, searcher);
}
long begin = new Date().getTime();
Hits hits = searcher.search(query);
long end = new Date().getTime();
System.out.println("Searched " + name +
" for '" + word + "' (" + (end - begin) + " ms): ");
if (hits.length() == 0) {
System.out.print("<NONE FOUND>");
return;
}
else System.out.println("hit="+hits.length());
//for (int i = 0; i < hits.length(); i++) {
for (int i = 0; i < 3; i++) {
Document doc = hits.doc(i); //java.io.InvalidClassException:
org.apache.lucene.document.Document;
//String[] values = doc.getValues("syn");
//for (int j = 0; j < values.length; j++) {
//System.out.print(values[j] + " ");
System.out.println(doc.get("url")+"\n");
}
System.out.println(hits.length());
//System.out.println();
// DO NOT CLOSE searcher!
}
private static Searchable lookupRemote(String IP, String name)
throws Exception {
return (Searchable) Naming.lookup(IP + name);
}
}
--
Su.Cheng <su...@playstarmusic.com>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
Re: Who has sample code of remote multiple servers multiple
indexes searching?
Posted by "Su.Cheng" <su...@playstarmusic.com>.
Hi,
I found the problem. The version of Lucene on server is 2.1 while on
client is 1.9.
Thanks
On Wed, 2007-05-23 at 13:52 -0600, Su.Cheng wrote:
> Hi,
> I studied "5.6 Searching across multiple Lucene indexes 178" in <<Lucene
> in action>>.
>
> I have 2 remote serarch computers(SearchServer) work as index servers
> and search requests from a search client(SearchClient,the 3rd
> computer).
>
> An error message, "Exception in thread "main"
> java.rmi.UnmarshalException", was thrown out.
>
> Does someone can explain with sample code about multiple-index servers
> and multiple indexes in single server?
>
> Thanks.
>
> Below are the source code:
> ////////////////SearchServer.java/////////////////////
> import org.apache.lucene.search.IndexSearcher;
> import org.apache.lucene.search.ParallelMultiSearcher;
> import org.apache.lucene.search.RemoteSearchable;
> import org.apache.lucene.search.Searchable;
> import org.apache.lucene.search.Searcher;
> import org.apache.lucene.search.MultiSearcher;
>
> import java.io.File;
> import java.io.IOException;
> import java.rmi.Naming;
> import java.rmi.registry.LocateRegistry;
>
> public class SearchServer {
> private static final String m_disk1="/usr/local/eBingBong/"; //English
> private static final String m_disk2="/backup/eBingBong/"; //other
> languages
> private static Searchable []m_searchables;
>
> public static void main(String[] args) throws Exception {
> if (args.length != 1) {
> System.err.println("Usage: SearchServer <IP>");
> System.err.println("java -Xms1000m -Xmx2000m SearchServer 161");
> System.exit(-1);
> }
>
> FindIndex();
>
> LocateRegistry.createRegistry(1099);
>
> Searcher multiSearcher = new MultiSearcher(m_searchables);
> RemoteSearchable multiImpl = new RemoteSearchable(multiSearcher);
> //Naming.rebind("//192.168.10.175/LIA_Multi", multiImpl);
> Naming.rebind("//192.168.10." +args[0] + "/LIA_Multi", multiImpl);
>
> Searcher parallelSearcher = new ParallelMultiSearcher
> (m_searchables);
> RemoteSearchable parallelImpl = new RemoteSearchable
> (parallelSearcher);
> //Naming.rebind("//192.168.10.175/LIA_Parallel", parallelImpl);
> Naming.rebind("//192.168.10." + args[0] + "/LIA_Parallel",
> parallelImpl);
>
> System.out.println("Server started");
> }
> private static void FindIndex()
> {
> File []file=new File[10];
> File tmpFile;
> int i=0;
>
> tmpFile=new File(m_disk1,"english"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"chinese"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"japanese"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"korean"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"czech"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"german"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"greek"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"french"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"dutch"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
> tmpFile=new File(m_disk2,"russian"); if(tmpFile.exists()) file[i+
> +]=tmpFile;
>
> m_searchables = new Searchable[i];
> for (int j = 0; j < i; j++)
> {
> try
> {
> m_searchables[j] = new IndexSearcher(file[j].getAbsolutePath());
> }
> catch(IOException e) {}
> System.out.println(file[j].getAbsolutePath());
> }
>
> }
> }
> /////////////////////////SearchClient.java///////////////////////
> import org.apache.lucene.document.Document;
> import org.apache.lucene.index.Term;
> import org.apache.lucene.search.Hits;
> import org.apache.lucene.search.MultiSearcher;
> import org.apache.lucene.search.ParallelMultiSearcher;
> import org.apache.lucene.search.Searchable;
> import org.apache.lucene.search.TermQuery;
> import org.apache.lucene.analysis.standard.StandardAnalyzer;
> import org.apache.lucene.search.Query;
> import org.apache.lucene.queryParser.QueryParser;
>
> import java.rmi.Naming;
> import java.util.Date;
> import java.util.HashMap;
>
> public class SearchClient {
> private static HashMap searcherCache = new HashMap();
> private static String[] m_args;
>
> public static void main(String[] args) throws Exception {
> m_args=args;
> if (args.length < 2) {
> System.err.println("Usage: SearchClient <query> <IP1> <IP2>
> <...>");
> System.err.println("java -Xms1000m -Xmx2000m SearchClient oil 161
> 163");
> System.exit(-1);
> }
>
> String word = args[0];
>
> // warm up the VM with several of each search
> for (int i=0; i < 5; i++) {
> search("LIA_Multi", word);
> search("LIA_Parallel", word);
> }
> }
>
> private static void search(String name, String word)
> throws Exception {
> //TermQuery query = new TermQuery(new Term("contents",
> word));//content //contents
> QueryParser parser=new QueryParser("content",new StandardAnalyzer
> ());
> //parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
> parser.setDefaultOperator(QueryParser.AND_OPERATOR);
> Query query = parser.parse(word);
> System.out.println(query.toString());
>
> //MultiSearcher searcher = (MultiSearcher) searcherCache.get
> (name);
> ParallelMultiSearcher searcher = (ParallelMultiSearcher)
> searcherCache.get(name);
>
> if (searcher == null)
> {
> int serverSum=m_args.length-1;
> Searchable []remoteSearch=new Searchable[serverSum];
> //remoteSearch[0]=lookupRemote("//192.168.10.156/",name);
> //remoteSearch[1]=lookupRemote("//192.168.10.175/",name);
> for(int suc=0; suc<serverSum; suc++) remoteSearch[suc]=lookupRemote
> ("//192.168.10."+m_args[suc+1]+"/",name);
>
> //searcher = new MultiSearcher(remoteSearch);
> searcher = new ParallelMultiSearcher(remoteSearch);
> searcherCache.put(name, searcher);
> }
>
> long begin = new Date().getTime();
> Hits hits = searcher.search(query);
> long end = new Date().getTime();
>
> System.out.println("Searched " + name +
> " for '" + word + "' (" + (end - begin) + " ms): ");
>
> if (hits.length() == 0) {
> System.out.print("<NONE FOUND>");
> return;
> }
> else System.out.println("hit="+hits.length());
>
> //for (int i = 0; i < hits.length(); i++) {
> for (int i = 0; i < 3; i++) {
> Document doc = hits.doc(i); //java.io.InvalidClassException:
> org.apache.lucene.document.Document;
>
> //String[] values = doc.getValues("syn");
> //for (int j = 0; j < values.length; j++) {
> //System.out.print(values[j] + " ");
>
> System.out.println(doc.get("url")+"\n");
>
> }
> System.out.println(hits.length());
> //System.out.println();
>
> // DO NOT CLOSE searcher!
> }
>
> private static Searchable lookupRemote(String IP, String name)
> throws Exception {
> return (Searchable) Naming.lookup(IP + name);
> }
> }
>
--
Su.Cheng <su...@playstarmusic.com>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org