Geeks With Blogs
Rohit Gupta Engaging talk on Microsoft Technologies ....My Resume

We can run multifield searches in Lucene using either the BooleanQuery API or using the MultiFieldQueryParser for parsing the query text. For e.g. If a index has 2 fields FirstName and LastName and if you need to search for "John" in the FirstName field and "Travis" in the LastName field one can use a Boolean Query as such:

   1: BooleanQuery bq = new BooleanQuery();
   2: Query qf = new TermQuery(new Lucene.Net.Index.Term("FirstName", "John"));
   3: Query ql = new TermQuery(new Lucene.Net.Index.Term("LastName", "Travis"));
   4: bq.Add(qf, BooleanClause.Occur.MUST);
   5: bq.Add(ql, BooleanClause.Occur.MUST);
   6: IndexSearcher srchr = new IndexSearcher(@"C:\indexDir");
   7: srchr.Search(bq);

Now if we need to search a single term across either of the FirstName and LastName fields then we can use the MultiFieldQueryParser as follows:

   1: Query query = MultiFieldQueryParser.parse("commonName", new String[] { "FirstName", "LastName" },new SimpleAnalyzer());
   2: srchr.Search(query);
Now if you need to search the term that must exist in both the fields then we use the following:
   1: Query query = MultiFieldQueryParser.Parse("commonName",
   2:                         new String[] { "FirstName", "LastName" },
   3:                         new BooleanClause.Occur[] { BooleanClause.Occur.MUST,BooleanClause.Occur.MUST},
   4:                         new SimpleAnalyzer());
   5: srchr.Search(query);

Finally if you don’t want a term to occur in one of the Fields (say FirstName) then use:

   1:  
   2:                 Query query = MultiFieldQueryParser.Parse("commonName",
   3:                                         new String[] { "FirstName", "LastName" },
   4:                                         new BooleanClause.Occur[] { BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.MUST},
   5:                                         new SimpleAnalyzer());
   6:                 srchr.Search(query);

so if you need to search a single term across multiple fields then use MultiFieldQueryParser, if you need to search different terms in different fields then use the BooleanQuery as shown first

Posted on Wednesday, January 7, 2009 6:44 PM | Back to top


Comments on this post: Lucene: Multifield searches

# re: Lucene: Multifield searches
Requesting Gravatar...
When i am trying this query.
Query qf = new TermQuery(new Lucene.Net.Index.Term("FirstName", "John"));
Then it show me Lucene not resolved.
Left by Gopal on May 08, 2009 5:13 AM

Your comment:
 (will show your gravatar)


Copyright © Rohit Gupta | Powered by: GeeksWithBlogs.net