[pylucene-dev] Re: question about PyLucene-2.0rc1-7

Andi Vajda vajda at osafoundation.org
Tue May 16 09:33:56 PDT 2006


On Tue, 16 May 2006, jian hu wrote:

> I have a problem using PyLucene-2.0rc1-7 for my web appliction using latest
> mod_python 3.1.4, apache 2.0.54 and python 2.4.1.
>
> PyLucene works just fine from console python scripts. Trying the same in
> apache server can't return the result,it seems the process stopped at line 9 
> of
> search.py

It looks like line 9 is where the first call to PyLucene is made. Is the 
thread it's running in a PyLucene.PythonThread ?

Here is an excerpt from PyLucene's README file that explains this:

    - Threading support with PyLucene.PythonThread

      The garbage collector implemented by the Java runtime support in libgcj
      insists on having full control over the creation of threads used by
      it. At the moment, it cannot be told about a thread 'after the fact'.

      Therefore all Python threads, except for the main thread, using any
      PyLucene code must be an instance of PythonThread. A PythonThread
      instance is an extension of a Python thread delegating the creation and
      initialization of the actual operating system thread to libgcj. There
      are in fact two thread objects, one Python, one Java, for the same
      operating system thread. The Python and Java runtimes are fully aware
      of that thread and view it as one of their own.

Andi..

>
> The Source I am using is the following
> (search.py)
> 1	from PyLucene import \
> 2	     SimpleAnalyzer,StandardAnalyzer
> 3	from BaseSearching import BaseSearching
> 4
> 5	index_dir1 = '/var/index1/index-dir'
> 6	index_dir2 = '/var/index2/index-dir'
> 7	def search(req,q):
> 8	    searchkey = q.strip()
> 9	    basesearch = 
> BaseSearching(index_dir1,index_dir2,StandardAnalyzer())
> 10	    if searchkey=='' or searchkey.isspace():
> 11	        hits=[]
> 12	    else:
> 13	        hits = basesearch.multifieldsearch(["title", 
> "desc"],searchkey)
> 14	    return len(hits)
>
> (BaseSearching.py)
> 1	from PyLucene import \
> 2	     SimpleAnalyzer, QueryParser, IndexSearcher, \
> 3	     WhitespaceAnalyzer, FSDirectory, \
> 4 
> MultiFieldQueryParser,StandardAnalyzer,MultiSearcher,BooleanClause
> 5
> 6	class BaseSearching:
> 7	    def __init__(self, indexdir1,indexdir2,analyzer):
> 8	        self.indexDir1 = indexdir1
> 9	        self.indexDir2 = indexdir2
> 10	        self.directory1 = FSDirectory.getDirectory(self.indexDir1, 
> False)
> 11	        self.directory2 = FSDirectory.getDirectory(self.indexDir2, 
> False)
> 12	        self.analyzer = analyzer
> 13	        self.searchers = [ IndexSearcher(self.directory1),
> 14	                           IndexSearcher(self.directory2)]
> 15
> 16	    def close(self):
> 17	        self.searchers = None
> 18	        self.directory1.close()
> 19	        self.directory2.close()
> 20
> 21	    def multifieldsearch(self,fieldlist,searchstr):
> 22	        try:
> 23	            #Code For PyLucene-1.0.1
> 24	            #query = 
> MultiFieldQueryParser.parseQueries(searchstr,fieldlist,self.analyzer)
> 25
> 26	            #Code For PyLucene-2.0rc1-7
> 27	            SHOULD = BooleanClause.Occur.SHOULD
> 28	            query = 
> MultiFieldQueryParser.parseQueries(searchstr,fieldlist,[SHOULD, 
> SHOULD],self.analyzer)
> 29
> 30	            searcher = MultiSearcher(self.searchers)
> 31	            hits = searcher.search(query)
> 32	            return hits
> 33	        except:
> 34	            return None
>
> Before Upgrade to 2.0rc1-7 I used PyLucene-1.0.1,that works fine from
> console and apache server.
>
> I really don't know what else can I do to make it work.
>
> Any ideas for how to make this work?
>
> Thanks,
>
> hujian
>
>
>


More information about the pylucene-dev mailing list