diff --git a/src/main/java/org/RI/P2/Searcher.java b/src/main/java/org/RI/P2/Searcher.java index ca5844d..c331833 100644 --- a/src/main/java/org/RI/P2/Searcher.java +++ b/src/main/java/org/RI/P2/Searcher.java @@ -3,6 +3,8 @@ package org.RI.P2; import java.io.IOException; import java.nio.file.Paths; import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; import javax.swing.table.DefaultTableModel; @@ -22,10 +24,12 @@ public class Searcher extends javax.swing.JFrame { IndexSearcher searcher; String dataPath; String indexPath; + String field; - Searcher(String dataPath, String indexPath) throws IOException { + Searcher(String dataPath, String indexPath, String field) throws IOException { this.dataPath = dataPath; this.indexPath = indexPath; + this.field = field; searcher = createIndexSearcher(); initComponents(); } @@ -86,7 +90,7 @@ public class Searcher extends javax.swing.JFrame { private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) throws IOException, org.apache.lucene.queryparser.classic.ParseException { - searchFiles(jTextField1.getText()); + searchFiles(jTextField1.getText(), field); } IndexSearcher createIndexSearcher() throws IOException { @@ -96,9 +100,9 @@ public class Searcher extends javax.swing.JFrame { return searcher; } - TopDocs queryIndex(String queryString, int resultNumber) + TopDocs queryIndex(String queryString, String field, int resultNumber) throws IOException, org.apache.lucene.queryparser.classic.ParseException { - Query query = new QueryParser("abstract", new StandardAnalyzer()).parse(queryString); + Query query = new QueryParser(field, new StandardAnalyzer()).parse(queryString); TopDocs topDocs = searcher.search(query, resultNumber); return topDocs; } @@ -112,12 +116,31 @@ public class Searcher extends javax.swing.JFrame { } } - void searchFiles(String query) throws IOException, org.apache.lucene.queryparser.classic.ParseException { + void searchFiles(String query, String field) + throws IOException, org.apache.lucene.queryparser.classic.ParseException { int resultNumber = 20; - TopDocs results = queryIndex(query, resultNumber); + TopDocs results = queryIndex(query, field, resultNumber); showResults(results); } + private static void validateField(String fieldContent) { + List availableOptions = new ArrayList<>(); + availableOptions.add("title"); + availableOptions.add("authors"); + availableOptions.add("institutions"); + availableOptions.add("abstract"); + availableOptions.add("emails"); + if (!availableOptions.contains(fieldContent)) { + System.out.println("Wrong field name. Available options:"); + System.out.println("authors"); + System.out.println("title"); + System.out.println("abstract"); + System.out.println("institutions"); + System.out.println("emails"); + System.exit(1); + } + } + private static void usage() { System.out.println("Usage: Searcher "); System.exit(1); @@ -125,11 +148,13 @@ public class Searcher extends javax.swing.JFrame { public static void main(String[] args) throws IOException, ParseException, org.apache.lucene.queryparser.classic.ParseException { - if (args.length != 1) { + if (args.length != 2) { usage(); } String dataDirectory = args[0]; String indexDirectory = ".index"; + String searchField = args[1]; + validateField(searchField); Indexer indexer = new Indexer(dataDirectory, indexDirectory); indexer.populateIndex(); @@ -154,7 +179,7 @@ public class Searcher extends javax.swing.JFrame { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { try { - new Searcher(args[0], indexDirectory).setVisible(true); + new Searcher(dataDirectory, indexDirectory, searchField).setVisible(true); } catch (IOException exp) { System.err.println(exp); }