Search code examples
javasolrlucene

Lucene MultiFieldQueryParser does not work


I do not understand why the query does not work.

I need to search for a document in by two fields. Two ID-s. It need to search for a document if 2 values match. ID1 AND ID2

But I get an empty result.

        query = MultiFieldQueryParser.parse(new String[]{id1, id2},
            new String[]{"ID1", "ID2"},
            new SimpleAnalyzer());
        TopDocs topDocs = searcher.search(query, 1);
        Document doc = searcher.doc(topDocs.scoreDocs[0].doc)

The index works 100%. Verified by other requests.

Thanks for the help.


Solution

  • Since you only want to perform an AND intersection between two separate queries -- and not really do a MultiFieldQuery (where you search for the same value in multiple fields), a slightly modified version of what is shown in Lucene OR search using Boolean Query should work:

    BooleanQuery bothQuery = new BooleanQuery();
    
                                             // field, value
    TermQuery idQuery1 = new TermQuery(new Term("ID1", "id1"));
    TermQuery idQuery2 = new TermQuery(new Term("ID2", "id2"));
    
    bothQuery.add(new BooleanClause(idQuery1, BooleanClause.Occur.MUST));
    bothQuery.add(new BooleanClause(idQuery2, BooleanClause.Occur.MUST));
    
    TopDocs topDocs = searcher.search(bothQuery, 1);
    Document doc = searcher.doc(topDocs.scoreDocs[0].doc)