I am trying to create an query for Lucene to search like below
word:"searched_word" AND (category:0 OR category:1)
what means searched_word must be in word field and category field is 0 or 1.
word field is normal Field type category field is NumericField type
BooleanQuery mainQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("category", NumericUtils.IntToPrefixCoded(0)));
Query query2 = new TermQuery(new Term("category", NumericUtils.IntToPrefixCoded(1));
Query queryTerm= new TermQuery(new Term("word", searchedWord));
mainQuery.Add(queryTerm, BooleanClause.Occur.MUST);
BooleanQuery innerOrQuery = new BooleanQuery();
//How do i add them as OR and as AND to mainQuery
innerOrQuery.Add(querySingleDirection, BooleanClause.Occur.MUST);
innerOrQuery.Add(queryBothDirection, BooleanClause.Occur.MUST);
mainQuery.Add(innerOrQuery, BooleanClause.Occur.MUST);
TopDocs topDocs = _indexSearcher.Search(mainQuery, Settings.Current.MaximumTopScoreCount);
Query queryTerm = new TermQuery(new Term("word", searchedWord));
Query query1 = new TermQuery(new Term("category", NumericUtils.IntToPrefixCoded(0)));
Query query2 = new TermQuery(new Term("category", NumericUtils.IntToPrefixCoded(1));
BooleanQuery innerOrQuery = new BooleanQuery();
innerOrQuery.Add(query1, BooleanClause.Occur.SHOULD);
innerOrQuery.Add(query2, BooleanClause.Occur.SHOULD);
BooleanQuery mainQuery = new BooleanQuery();
mainQuery.Add(queryTerm, BooleanClause.Occur.MUST);
mainQuery.Add(innerOrQuery, BooleanClause.Occur.MUST);
TopDocs topDocs = _indexSearcher.Search(mainQuery, Settings.Current.MaximumTopScoreCount);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.