0
votes

I have lucene documents with below structure

 {
    name : "A",
    id :1
    },
{
    name : "B",
    id :1
    },
{
    name : "C",
    id :3
    }

Now I have a collection like List which contains A, B. I wanted to select documents where name is A or B . So as per above lucene documents I should have documents A and B . I wanted to fetch these 2 documents with a single lucene call instead of multiple lucene calls for each document.

i tried with BooleanQuery and adding my search query in a loop but the search query did not return anything. if I hit lucene with single document it works and returns a single document.

Could anyone please suggest How I can retrieve all matching documents with a single query ?

I tried something like below

List<string> terms = new List<string>(){'A', 'B'};
var mainQuery = new BooleanQuery);
                var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "name", analyzer);
                foreach (var term in terms)
                {

                    var query = parser.Parse(term);
                    mainQuery.Add(query, Occur.MUST_NOT);

                } 
var hits = _searcher.Search(mainQuery, 1000);

Above query did not work and returns 0 result .

1

1 Answers

0
votes

I am able to resolve this by my own.It's just a simple OR clause which is Occur.SHOULD

var booleanQuery = new BooleanQuery();
                foreach (var term in terms)
                {
                    var termQuery = new TermQuery(new Term("name", term ));
                    booleanQuery.Add(termQuery, Occur.SHOULD);

                }