Hi,
Please forgive me if this comes across as being naïve however Ive bashed my head against it for a while and cant come up with a solution. Overview: I have the following basic document structure: Document doc = new Document(); doc.Add(Field.Text("itemtitle", iteminf.itemtitle)); doc.Add(Field.Text("itemSubTitle", iteminf.itemSubTitle)); doc.Add(Field.Keyword("CategoryID", iteminf.CategoryID)); -- THIS ID (1 -30000) is passed in here as a string writer.AddDocument(doc); What I would like to do is search the title and subtitle fields with what a user types in so I build up a search query string Qstr = (query + ); Qstr += (itemtitle: + ( + query + ) + ); Qstr += (itemSubTitle: + ( + query + ) + ); Pass it to QueryParse get the Query Query q = QueryParser.Parse(sbquerys.ToString(), SEARCH_KEY_ITEMDESC, new StandardAnalyzer()); Execute the query searcher.Search(query); No Problem get the results etc. Now the problem what I would like to do is restricted the results coming back to only certain CategoryIDs so I changed my Qstr dynamically such like string[] leafcats = GET_ARRAY_OF_RELEVANT_CATIDS_AS_STRING_ARRAY(); sbquerys += CategoryID: + (; for(int i=0; i< leafcats.Length; i++) { sbquerys += leafcats[i]+ ; } sbquerys += ); Qstr += sbquerys Pass it to QueryParse get the Query Query q = QueryParser.Parse(Qstr SEARCH_KEY_ITEMDESC, new StandardAnalyzer()); Now not surprisingly the Parse Function calls takes upward of about 10 seconds (or throws a toomanybool clauses exception) I think this is due to the fact that Im passing it with so many CategoryID (between 1 -30000) So I tried building up the Query using the API BooleanQuery bq = new BooleanQuery(); Term t = new Term(itemdesc, query); <<< Doesnt work because query is something user has typed in and thus doesnt match properly bq.Add(new TermQuery(t), false, false); t = new Term(itemSubTitle, query); bq.Add(new TermQuery(t), false, false); t = new Term(itemtitle, query); bq.Add(new TermQuery(t), false, false); if (categoryid != null) { string[] leafcats = (string[])leafcategoryids.ToArray(typeof(string)); t = new Term(SEARCH_KEY_CATEGORYID, string.Join(" OR ",leafcats)); <<<< OR DOESNT WORK bq.Add(new TermQuery(t), true, false); << NOTE TRUE } But this doesnt seem to execute the OR clause in the new Term value which is not surprising because its a TermQuery which is supposed to be 1 value. So now Im a bit lost as to where to take this perhaps QueryFilter would do the trick but Im lost on the syntax and just dont feel that is the right approach. Anyhow any help you can provide would be greatly appreciate -A