3

I want to search text phase in pdf like "Labor Law". But in result, it return all file that contain the word "Labor" and "Law". please any help checking my cod below:

EnglishAnalyzer analyzer = new EnglishAnalyzer();
analyzer.setVersion(Version.LATEST);          

QueryParser parser = new QueryParser("content", analyzer);
Query query = parser.parse("Labor Law");

Directory indexDirectory = FSDirectory.open(new File(indexLucencePath));
DirectoryReader dirReader = DirectoryReader.open(indexDirectory);
indexSearcher = new IndexSearcher(dirReader);

ScoreDoc[] queryResults = indexSearcher.search(query, numOfResults).scoreDocs;

List<IndexItem> results = new ArrayList<IndexItem>();
for (ScoreDoc scoreDoc : queryResults) {
    Document doc = indexSearcher.doc(scoreDoc.doc);
    results.add(new IndexItem(doc.get(IndexItem.TITLE), doc.get(IndexItem.CONTENT)));
  }
Mankeomorakort
  • 1,451
  • 1
  • 22
  • 36

2 Answers2

2

Try

Phrase query:

Query query = parser.parse("\"Labor Law\"");

All terms must be present

Query query = parser.parse("+Labor +Law");

You can also create query yourself like this

BooleanQuery query= new BooleanQuery();
TermQuery clause1 = new TermQuery(new Term("content", "Labor"));
TermQuery clause2 = new TermQuery(new Term("content", "Law"));
query.add(new BooleanClause(clause1, BooleanClause.Occur.MUST));
query.add(new BooleanClause(clause1, BooleanClause.Occur.MUST));
NeatNerd
  • 2,305
  • 3
  • 26
  • 49
1

There are different types of Analyzer available, please check with different Analyzer for your requirement. Comparison of Lucene Analyzers. This may also help Lucene: Multi-word phrases as search terms

Community
  • 1
  • 1
RishiKesh Pathak
  • 2,122
  • 1
  • 18
  • 24