Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to search full text in lucene 4.10

Tags:

java

lucene

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)));
  }
like image 804
Mankeomorakort Avatar asked Nov 20 '25 04:11

Mankeomorakort


2 Answers

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));
like image 54
NeatNerd Avatar answered Nov 21 '25 16:11

NeatNerd


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

like image 21
RishiKesh Pathak Avatar answered Nov 21 '25 18:11

RishiKesh Pathak



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!