Awesome... thank you
Sim

On Tue, Jan 12, 2010 at 12:45 AM, Jokin Cuadrado <joki...@gmail.com> wrote:

> Correct, that's the way we use it.
>
> On 1/12/10, Simone Chiaretta <simone.chiare...@gmail.com> wrote:
> > OK, so I can create the query parser each time, using the analyzer I
> created
> > at the search engine startup? Correct?
> > Simone
> >
> > On Tue, Jan 12, 2010 at 12:28 AM, Jokin Cuadrado <joki...@gmail.com>
> wrote:
> >
> >> The queryparser it's not thread safe, so you must use a new one in
> >> every request, however, is very lightweight, because the bigger
> >> complexity comes from the underlying analyzer, and this one it's
> >> thread safe.
> >>
> >> On 1/12/10, Simone Chiaretta <simone.chiare...@gmail.com> wrote:
> >> > I'm trying to go live with our search engine implementation based on
> >> > Lucene.net.
> >> > Unfortunately we have to keep it inside our appdomain in the web
> >> application
> >> > to make it work in shared hosting scenario.
> >> >
> >> > But we are getting quite a few problems, so I was wondering if there
> are
> >> > some issues with concurrent access:
> >> > 1 - is the QueryParser thread safe? Can I make it one at the beginning
> >> > of
> >> > the times and reuse it in all my queries? or do I've to create one
> each
> >> > time?
> >> > I'm asking because I'm getting strange errors like:
> >> >
> >> > ystem.InvalidOperationException: Collection was modified; enumeration
> >> > operation may not execute.     at
> >> > System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
> at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_add_error_token(Int32 kind,
> Int32
> >> > pos)     at Lucene.Net.QueryParsers.QueryParser.Jj_scan_token(Int32
> >> > kind)
> >> > at Lucene.Net.QueryParsers.QueryParser.Jj_3_1()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_rescan_token()     at
> >> > Lucene.Net.QueryParsers.QueryParser.GenerateParseException()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)
> at
> >> > Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> >> >
> Subtext.Framework.Services.SearchEngine.SearchEngineService.Search(String
> >> > queryString, Int32 max, Int32 blogId, Int32 entryId)
> >> >
> >> > Which looks to me like a threading issue.
> >> >
> >> > I also got this one:
> >> >
> >> > Lucene.Net.QueryParsers.QueryParser+LookaheadSuccess: Error in the
> >> > application.
> >> > at Lucene.Net.QueryParsers.QueryParser.Jj_scan_token(Int32 kind)
> at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_3R_2()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_3R_2()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_rescan_token()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_3_1()     at
> >> > Lucene.Net.QueryParsers.QueryParser.GenerateParseException()     at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)
> at
> >> > Lucene.Net.QueryParsers.QueryParser.Jj_consume_token(Int32 kind)
> at
> >> > Lucene.Net.QueryParsers.QueryParser.Term(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Clause(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Query(String field)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> >> > Lucene.Net.QueryParsers.QueryParser.Parse(String query)     at
> >> >
> Subtext.Framework.Services.SearchEngine.SearchEngineService.Search(String
> >> > queryString, Int32 max, Int32 blogId, Int32 entryId)
> >> >
> >> > And this one:
> >> >
> >> > Lucene.Net.QueryParsers.ParseException: Cannot parse 'what is css
> >> > url': Encountered
> >> > "what is css url" at line 1, column 0. Was expecting one of:     <NOT>
> >> > ...     "+"
> >> > ...     "-" ...     "(" ...     "*" ...     <QUOTED> ...     <TERM>
> ...
> >> > <PREFIXTERM> ...     <WILDTERM> ...     "[" ...     "{" ...
> >> > <NUMBER> ...
> >> > at Lucene.Net.QueryParsers.QueryParser.Parse(String query)
> >> >
> >> > Which is fine if I really added an invalid character in the query, but
> >> "what
> >> > is css url" looks to me like it's a valid query.
> >> >
> >> > What I'm doing is, to avoid creating a new query parser for each
> query,
> >> to
> >> > "cache" the same as variable inside the singleton class that holds the
> >> > search engine.
> >> > Is this a good approach? or a bad one? (I guess bad since this all
> seem
> >> to
> >> > be threading issues).
> >> > Is creating a new query parser for each query a performance problem?
> >> >
> >> > Thank you
> >> > Simone
> >> >
> >> > --
> >> > Simone Chiaretta
> >> > Microsoft MVP ASP.NET - ASPInsider
> >> > Blog: http://codeclimber.net.nz
> >> > RSS: http://feeds2.feedburner.com/codeclimber
> >> > twitter: @simonech
> >> >
> >> > Any sufficiently advanced technology is indistinguishable from magic
> >> > "Life is short, play hard"
> >> >
> >>
> >>
> >> --
> >> Jokin
> >>
> >
> >
> >
> > --
> > Simone Chiaretta
> > Microsoft MVP ASP.NET - ASPInsider
> > Blog: http://codeclimber.net.nz
> > RSS: http://feeds2.feedburner.com/codeclimber
> > twitter: @simonech
> >
> > Any sufficiently advanced technology is indistinguishable from magic
> > "Life is short, play hard"
> >
>
>
> --
> Jokin
>



-- 
Simone Chiaretta
Microsoft MVP ASP.NET - ASPInsider
Blog: http://codeclimber.net.nz
RSS: http://feeds2.feedburner.com/codeclimber
twitter: @simonech

Any sufficiently advanced technology is indistinguishable from magic
"Life is short, play hard"

Reply via email to