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"