mirror of https://github.com/apache/lucene.git
LUCENE-1740: add 'analyzer' command to Lucli, to change analyzer from the default StandardAnalyzer
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@793526 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a284608778
commit
91aedd6685
|
@ -68,6 +68,10 @@ New features
|
||||||
|
|
||||||
8. LUCENE-1522: Added contrib/fast-vector-highlighter, a new alternative
|
8. LUCENE-1522: Added contrib/fast-vector-highlighter, a new alternative
|
||||||
highlighter. (Koji Sekiguchi via Mike McCandless)
|
highlighter. (Koji Sekiguchi via Mike McCandless)
|
||||||
|
|
||||||
|
9. LUCENE-1740: Added "analyzer" command to Lucli, enabling changing
|
||||||
|
the analyzer from the default StandardAnalyzer. (Bernd Fondermann
|
||||||
|
via Mike McCandless)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
|
|
||||||
|
|
|
@ -104,12 +104,29 @@ class LuceneMethods {
|
||||||
private String fieldsArray[]; //Fields as an array
|
private String fieldsArray[]; //Fields as an array
|
||||||
private Searcher searcher;
|
private Searcher searcher;
|
||||||
private Query query; //current query string
|
private Query query; //current query string
|
||||||
|
private String analyzerClassFQN = null; // Analyzer class, if NULL, use default Analyzer
|
||||||
|
|
||||||
public LuceneMethods(String index) {
|
public LuceneMethods(String index) {
|
||||||
indexName = index;
|
indexName = index;
|
||||||
message("Lucene CLI. Using directory '" + indexName + "'. Type 'help' for instructions.");
|
message("Lucene CLI. Using directory '" + indexName + "'. Type 'help' for instructions.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Analyzer createAnalyzer() {
|
||||||
|
if (analyzerClassFQN == null) return new StandardAnalyzer();
|
||||||
|
try {
|
||||||
|
Class aClass = Class.forName(analyzerClassFQN);
|
||||||
|
Object obj = aClass.newInstance();
|
||||||
|
if (!(obj instanceof Analyzer)) {
|
||||||
|
message("Given class is not an Analyzer: " + analyzerClassFQN);
|
||||||
|
return new StandardAnalyzer();
|
||||||
|
}
|
||||||
|
return (Analyzer)obj;
|
||||||
|
} catch (Exception e) {
|
||||||
|
message("Unable to use Analyzer " + analyzerClassFQN);
|
||||||
|
return new StandardAnalyzer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void info() throws java.io.IOException {
|
public void info() throws java.io.IOException {
|
||||||
IndexReader indexReader = IndexReader.open(indexName);
|
IndexReader indexReader = IndexReader.open(indexName);
|
||||||
|
@ -185,9 +202,9 @@ class LuceneMethods {
|
||||||
//another option is to just do message(doc);
|
//another option is to just do message(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void optimize() throws IOException {
|
public void optimize() throws IOException {
|
||||||
//open the index writer. False: don't create a new one
|
//open the index writer. False: don't create a new one
|
||||||
IndexWriter indexWriter = new IndexWriter(indexName, new StandardAnalyzer(), false);
|
IndexWriter indexWriter = new IndexWriter(indexName, createAnalyzer(), false);
|
||||||
message("Starting to optimize index.");
|
message("Starting to optimize index.");
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
indexWriter.optimize();
|
indexWriter.optimize();
|
||||||
|
@ -196,10 +213,10 @@ class LuceneMethods {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Query explainQuery(String queryString) throws IOException, ParseException {
|
private Query explainQuery(String queryString) throws IOException, ParseException {
|
||||||
|
|
||||||
searcher = new IndexSearcher(indexName);
|
searcher = new IndexSearcher(indexName);
|
||||||
Analyzer analyzer = new StandardAnalyzer();
|
Analyzer analyzer = createAnalyzer();
|
||||||
getFieldInfo();
|
getFieldInfo();
|
||||||
|
|
||||||
int arraySize = indexedFields.size();
|
int arraySize = indexedFields.size();
|
||||||
|
@ -220,7 +237,7 @@ class LuceneMethods {
|
||||||
private Hits initSearch(String queryString) throws IOException, ParseException {
|
private Hits initSearch(String queryString) throws IOException, ParseException {
|
||||||
|
|
||||||
searcher = new IndexSearcher(indexName);
|
searcher = new IndexSearcher(indexName);
|
||||||
Analyzer analyzer = new StandardAnalyzer();
|
Analyzer analyzer = createAnalyzer();
|
||||||
getFieldInfo();
|
getFieldInfo();
|
||||||
|
|
||||||
int arraySize = fields.size();
|
int arraySize = fields.size();
|
||||||
|
@ -278,7 +295,7 @@ class LuceneMethods {
|
||||||
Map tokenMap = new HashMap();
|
Map tokenMap = new HashMap();
|
||||||
final int maxFieldLength = 10000;
|
final int maxFieldLength = 10000;
|
||||||
|
|
||||||
Analyzer analyzer = new StandardAnalyzer();
|
Analyzer analyzer = createAnalyzer();
|
||||||
Iterator fields = doc.getFields().iterator();
|
Iterator fields = doc.getFields().iterator();
|
||||||
final Token reusableToken = new Token();
|
final Token reusableToken = new Token();
|
||||||
while (fields.hasNext()) {
|
while (fields.hasNext()) {
|
||||||
|
@ -374,5 +391,14 @@ class LuceneMethods {
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void analyzer(String word) {
|
||||||
|
if ("current".equals(word)) {
|
||||||
|
String current = analyzerClassFQN == null ? "StandardAnalyzer" : analyzerClassFQN;
|
||||||
|
message("The currently used Analyzer class is: " + current);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
analyzerClassFQN = word;
|
||||||
|
message("Switched to Analyzer class " + analyzerClassFQN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,7 @@ public class Lucli {
|
||||||
final static int INDEX = 7;
|
final static int INDEX = 7;
|
||||||
final static int TOKENS = 8;
|
final static int TOKENS = 8;
|
||||||
final static int EXPLAIN = 9;
|
final static int EXPLAIN = 9;
|
||||||
|
final static int ANALYZER = 10;
|
||||||
|
|
||||||
String historyFile;
|
String historyFile;
|
||||||
TreeMap commandMap = new TreeMap();
|
TreeMap commandMap = new TreeMap();
|
||||||
|
@ -124,6 +125,7 @@ public class Lucli {
|
||||||
addCommand("index", INDEX, "Choose a different lucene index. Example index my_index", 1);
|
addCommand("index", INDEX, "Choose a different lucene index. Example index my_index", 1);
|
||||||
addCommand("tokens", TOKENS, "Does a search and shows the top 10 tokens for each document. Verbose! Example: tokens foo", 1);
|
addCommand("tokens", TOKENS, "Does a search and shows the top 10 tokens for each document. Verbose! Example: tokens foo", 1);
|
||||||
addCommand("explain", EXPLAIN, "Explanation that describes how the document scored against query. Example: explain foo", 1);
|
addCommand("explain", EXPLAIN, "Explanation that describes how the document scored against query. Example: explain foo", 1);
|
||||||
|
addCommand("analyzer", ANALYZER, "Specifies the Analyzer class to be used. Example: analyzer org.apache.lucene.analysis.SimpleAnalyzer", 1);
|
||||||
|
|
||||||
//parse command line arguments
|
//parse command line arguments
|
||||||
parseArgs(args);
|
parseArgs(args);
|
||||||
|
@ -234,6 +236,9 @@ public class Lucli {
|
||||||
}
|
}
|
||||||
luceneMethods.search(query, true, false, cr);
|
luceneMethods.search(query, true, false, cr);
|
||||||
break;
|
break;
|
||||||
|
case ANALYZER:
|
||||||
|
luceneMethods.analyzer(words[1]);
|
||||||
|
break;
|
||||||
case HELP:
|
case HELP:
|
||||||
help();
|
help();
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue