You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/01/13 13:42:57 UTC
svn commit: r1557694 - in /lucene/dev/branches/lucene5376/lucene:
core/src/java/org/apache/lucene/index/
facet/src/java/org/apache/lucene/facet/range/
server/src/java/org/apache/lucene/server/
server/src/java/org/apache/lucene/server/handlers/ server/s...
Author: mikemccand
Date: Mon Jan 13 12:42:56 2014
New Revision: 1557694
URL: http://svn.apache.org/r1557694
Log:
LUCENE-5376: fix nocommits, add tests, get RAMDir indices working more correctly; rename 'index' param to 'search' when registering a field
Modified:
lucene/dev/branches/lucene5376/lucene/core/src/java/org/apache/lucene/index/PersistentSnapshotDeletionPolicy.java
lucene/dev/branches/lucene5376/lucene/facet/src/java/org/apache/lucene/facet/range/DoubleRangeFacetCounts.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/DirectoryFactory.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/GlobalState.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/IndexState.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/ServerCodec.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/AddDocumentHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateIndexHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateSnapshotHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/StartIndexHandler.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/EnumType.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/Request.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/ServerBaseTestCase.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestAddDocuments.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestBooleanFieldType.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestFacets.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestGrouping.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestHighlight.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestIndexing.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestLiveValues.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSearch.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestServer.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSnapshots.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java
lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestVirtualFields.java
Modified: lucene/dev/branches/lucene5376/lucene/core/src/java/org/apache/lucene/index/PersistentSnapshotDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/core/src/java/org/apache/lucene/index/PersistentSnapshotDeletionPolicy.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/core/src/java/org/apache/lucene/index/PersistentSnapshotDeletionPolicy.java (original)
+++ lucene/dev/branches/lucene5376/lucene/core/src/java/org/apache/lucene/index/PersistentSnapshotDeletionPolicy.java Mon Jan 13 12:42:56 2014
@@ -31,6 +31,7 @@ import org.apache.lucene.store.Directory
import org.apache.lucene.store.IOContext;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.IndexOutput;
+import org.apache.lucene.store.NoSuchDirectoryException;
import org.apache.lucene.util.IOUtils;
/**
@@ -111,9 +112,12 @@ public class PersistentSnapshotDeletionP
loadPriorSnapshots();
- if (mode == OpenMode.APPEND && nextWriteGen == 0) {
- throw new IllegalStateException("no snapshots stored in this directory");
- }
+ // nocommit this seems overly anal? it could simply be
+ // i'm opening a prior index but had never taken a
+ // snapshot in it?
+ //if (mode == OpenMode.APPEND && nextWriteGen == 0) {
+ //throw new IllegalStateException("no snapshots stored in this directory");
+ //}
}
/**
@@ -215,7 +219,15 @@ public class PersistentSnapshotDeletionP
}
private synchronized void clearPriorSnapshots() throws IOException {
- for(String file : dir.listAll()) {
+ String[] files;
+ try {
+ files = dir.listAll();
+ } catch (NoSuchDirectoryException nsde) {
+ // It's OK if the directory doesn't exist yet; this
+ // just means there's nothing to clear:
+ return;
+ }
+ for(String file : files) {
if (file.startsWith(SNAPSHOTS_PREFIX)) {
dir.deleteFile(file);
}
@@ -242,7 +254,15 @@ public class PersistentSnapshotDeletionP
long genLoaded = -1;
IOException ioe = null;
List<String> snapshotFiles = new ArrayList<String>();
- for(String file : dir.listAll()) {
+ String[] files;
+ try {
+ files = dir.listAll();
+ } catch (NoSuchDirectoryException nsde) {
+ // It's OK if the directory doesn't exist yet; this
+ // just means there's nothing to load:
+ return;
+ }
+ for(String file : files) {
if (file.startsWith(SNAPSHOTS_PREFIX)) {
long gen = Long.parseLong(file.substring(SNAPSHOTS_PREFIX.length()));
if (genLoaded == -1 || gen > genLoaded) {
Modified: lucene/dev/branches/lucene5376/lucene/facet/src/java/org/apache/lucene/facet/range/DoubleRangeFacetCounts.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/facet/src/java/org/apache/lucene/facet/range/DoubleRangeFacetCounts.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/facet/src/java/org/apache/lucene/facet/range/DoubleRangeFacetCounts.java (original)
+++ lucene/dev/branches/lucene5376/lucene/facet/src/java/org/apache/lucene/facet/range/DoubleRangeFacetCounts.java Mon Jan 13 12:42:56 2014
@@ -71,6 +71,7 @@ public class DoubleRangeFacetCounts exte
LongRange[] longRanges = new LongRange[ranges.length];
for(int i=0;i<ranges.length;i++) {
DoubleRange range = ranges[i];
+ System.out.println("range " + i + ": " + range);
longRanges[i] = new LongRange(range.label,
NumericUtils.doubleToSortableLong(range.minIncl), true,
NumericUtils.doubleToSortableLong(range.maxIncl), true);
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/DirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/DirectoryFactory.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/DirectoryFactory.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/DirectoryFactory.java Mon Jan 13 12:42:56 2014
@@ -92,6 +92,8 @@ public abstract class DirectoryFactory {
}
};
} else {
+ // nocommit we should try to load/instantiate the class
+ // to allow custom dir impls, here
throw new IllegalArgumentException("unknown directory implementation \"" + dirImpl + "\"");
}
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/GlobalState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/GlobalState.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/GlobalState.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/GlobalState.java Mon Jan 13 12:42:56 2014
@@ -164,7 +164,11 @@ public class GlobalState implements Clos
if (state == null) {
String rootPath = (String) indexNames.get(name);
if (rootPath != null) {
- state = new IndexState(this, name, new File(rootPath));
+ if (rootPath.equals("NULL")) {
+ state = new IndexState(this, name, null, false);
+ } else {
+ state = new IndexState(this, name, new File(rootPath), false);
+ }
indices.put(name, state);
} else {
throw new IllegalArgumentException("index \"" + name + "\" was not yet created");
@@ -184,15 +188,19 @@ public class GlobalState implements Clos
/** Create a new index. */
public IndexState createIndex(String name, File rootDir) throws Exception {
synchronized (indices) {
- if (rootDir.exists()) {
- throw new IllegalArgumentException("rootDir \"" + rootDir + "\" already exists");
- }
if (indexNames.containsKey(name)) {
throw new IllegalArgumentException("index \"" + name + "\" already exists");
}
- indexNames.put(name, rootDir.toString());
+ if (rootDir == null) {
+ indexNames.put(name, "NULL");
+ } else {
+ if (rootDir.exists()) {
+ throw new IllegalArgumentException("rootDir \"" + rootDir + "\" already exists");
+ }
+ indexNames.put(name, rootDir.getAbsolutePath().toString());
+ }
saveIndexNames();
- IndexState state = new IndexState(this, name, rootDir);
+ IndexState state = new IndexState(this, name, rootDir, true);
indices.put(name, state);
return state;
}
@@ -208,7 +216,6 @@ public class GlobalState implements Clos
long gen = IndexState.getLastGen(stateDir, "indices");
lastIndicesGen = gen;
if (gen != -1) {
- // nocommit cutover to Directory
File path = new File(stateDir, "indices." + gen);
RandomAccessFile raf = new RandomAccessFile(path, "r");
byte[] bytes = new byte[(int) raf.length()];
@@ -220,7 +227,7 @@ public class GlobalState implements Clos
} catch (ParseException pe) {
// Something corrupted the save state since we last
// saved it ...
- throw new RuntimeException(pe);
+ throw new RuntimeException("index state file \"" + path + "\" cannot be parsed: " + pe.getMessage());
}
indexNames.putAll(o);
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/IndexState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/IndexState.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/IndexState.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/IndexState.java Mon Jan 13 12:42:56 2014
@@ -130,7 +130,6 @@ import net.minidev.json.parser.ParseExce
*/
public class IndexState implements Closeable {
- // nocommit settingsHandler should set this
/** Default {@link Version} for {@code matchVersion}. */
public Version matchVersion = Version.LUCENE_46;
@@ -283,9 +282,9 @@ public class IndexState implements Close
/** Which snapshots (List<Long>) are referencing which
* save state generations. */
Map<Long,Integer> genRefCounts;
- final SaveLoadRefCounts saveLoadGenRefCounts;
+ SaveLoadRefCounts saveLoadGenRefCounts;
- final SaveLoadState saveLoadState;
+ SaveLoadState saveLoadState;
/** Enables lookup of previously used searchers, so
* follow-on actions (next page, drill down/sideways/up,
@@ -313,10 +312,6 @@ public class IndexState implements Close
public final Analyzer indexAnalyzer = new AnalyzerWrapper(Analyzer.PER_FIELD_REUSE_STRATEGY) {
@Override
public Analyzer getWrappedAnalyzer(String name) {
- // nocommit hackish:
- if (name.equals("$facets")) {
- return RegisterFieldHandler.dummyAnalyzer;
- }
FieldDef fd = getField(name);
if (fd.valueType.equals("atom")) {
return keywordAnalyzer;
@@ -337,10 +332,6 @@ public class IndexState implements Close
public final Analyzer searchAnalyzer = new AnalyzerWrapper(Analyzer.PER_FIELD_REUSE_STRATEGY) {
@Override
public Analyzer getWrappedAnalyzer(String name) {
- // nocommit hackish:
- if (name.equals("$facets")) {
- return RegisterFieldHandler.dummyAnalyzer;
- }
FieldDef fd = getField(name);
if (fd.valueType.equals("atom")) {
return keywordAnalyzer;
@@ -364,10 +355,6 @@ public class IndexState implements Close
@Override
public Similarity get(String name) {
- // nocommit hacky that i have to do this!!
- if (name.equals("$facets")) {
- return defaultSim;
- }
return getField(name).sim;
}
};
@@ -402,39 +389,20 @@ public class IndexState implements Close
/** Name of this index. */
public final String name;
- private final boolean isNew;
+ /** True if this is a new index. */
+ private final boolean doCreate;
/** Sole constructor; creates a new index or loads an
* existing one if it exists, but does not start the
* index. */
- public IndexState(GlobalState globalState, String name, File rootDir) throws Exception {
+ public IndexState(GlobalState globalState, String name, File rootDir, boolean doCreate) throws IOException {
+ //System.out.println("IndexState.init name=" + name + " this=" + this + " rootDir=" + rootDir);
this.globalState = globalState;
this.name = name;
this.rootDir = rootDir;
-
- File stateDirFile = new File(rootDir, "state");
- if (!stateDirFile.exists()) {
- stateDirFile.mkdirs();
- isNew = true;
- } else {
- isNew = false;
- }
-
- Directory stateDir = df.open(stateDirFile);
-
- saveLoadGenRefCounts = new SaveLoadRefCounts(stateDir);
-
- // Snapshot ref counts:
- genRefCounts = saveLoadGenRefCounts.load();
- if (genRefCounts == null) {
- genRefCounts = new HashMap<Long,Integer>();
- }
-
- saveLoadState = new SaveLoadState(stateDir);
-
- JSONObject priorState = saveLoadState.load();
- if (priorState != null) {
- load((JSONObject) priorState.get("state"));
+ this.doCreate = doCreate;
+ if (doCreate == false) {
+ initSaveLoadState();
}
}
@@ -802,7 +770,7 @@ public class IndexState implements Close
@Override
public synchronized void close() throws IOException {
- //System.out.println("IndexState.close name=" + name + " writer=" + writer);
+ //System.out.println("IndexState.close name=" + name);
commit();
// nocommit catch exc & rollback:
if (writer != null) {
@@ -814,10 +782,16 @@ public class IndexState implements Close
indexDir,
taxoDir);
writer = null;
- // nocommit this is dangerous .. eg Server iterates
- // all IS.indices and closes ...:
- globalState.indices.remove(name);
}
+
+ // nocommit should we remove this instance? if app
+ // starts again ... should we re-use the current
+ // instance? seems ... risky?
+ // nocommit this is dangerous .. eg Server iterates
+ // all IS.indices and closes ...:
+ // nocommit need sync:
+
+ globalState.indices.remove(name);
}
/** True if this index is started. */
@@ -898,6 +872,15 @@ public class IndexState implements Close
writer.getIndexWriter().commit();
}
+ // nocommit needs test case that creates index, changes
+ // some settings, closes it w/o ever starting it:
+ // settings changes are lost then?
+ //System.out.println("IndexState.commit name=" + name + " saveLoadState=" + saveLoadState + " this=" + this);
+
+ if (saveLoadState == null) {
+ initSaveLoadState();
+ }
+
JSONObject saveState = new JSONObject();
saveState.put("state", getSaveState());
saveLoadState.save(saveState);
@@ -905,44 +888,48 @@ public class IndexState implements Close
}
/** Load all previously saved state. */
- public synchronized void load(JSONObject o) throws Exception {
+ public synchronized void load(JSONObject o) throws IOException {
// To load, we invoke each handler from the save state,
// as if the app had just done so from a fresh index,
// except for suggesters which uses a dedicated load
// method:
- // Global settings:
- JSONObject settingsState = (JSONObject) o.get("settings");
- //System.out.println("load: state=" + o);
- Request r = new Request(null, null, settingsState, SettingsHandler.TYPE);
- FinishRequest fr = ((SettingsHandler) globalState.getHandler("settings")).handle(this, r, null);
- fr.finish();
- assert !Request.anythingLeft(settingsState): settingsState.toString();
-
- JSONObject liveSettingsState = (JSONObject) o.get("settings");
- r = new Request(null, null, liveSettingsState, LiveSettingsHandler.TYPE);
- fr = ((LiveSettingsHandler) globalState.getHandler("liveSettings")).handle(this, r, null);
- fr.finish();
- assert !Request.anythingLeft(liveSettingsState): liveSettingsState.toString();
-
- // Field defs:
- JSONObject fieldsState = (JSONObject) o.get("fields");
- JSONObject top = new JSONObject();
- top.put("fields", fieldsState);
- r = new Request(null, null, top, RegisterFieldHandler.TYPE);
- fr = ((RegisterFieldHandler) globalState.getHandler("registerFields")).handle(this, r, null);
- assert !Request.anythingLeft(top): top;
- fr.finish();
-
- for(FieldDef fd : fields.values()) {
- if (fd.liveValuesIDField != null) {
- liveFieldValues.put(fd.name, new StringLiveFieldValues(manager, fd.liveValuesIDField, fd.name));
+ try {
+ // Global settings:
+ JSONObject settingsState = (JSONObject) o.get("settings");
+ //System.out.println("load: state=" + o);
+ Request r = new Request(null, null, settingsState, SettingsHandler.TYPE);
+ FinishRequest fr = ((SettingsHandler) globalState.getHandler("settings")).handle(this, r, null);
+ fr.finish();
+ assert !Request.anythingLeft(settingsState): settingsState.toString();
+
+ JSONObject liveSettingsState = (JSONObject) o.get("settings");
+ r = new Request(null, null, liveSettingsState, LiveSettingsHandler.TYPE);
+ fr = ((LiveSettingsHandler) globalState.getHandler("liveSettings")).handle(this, r, null);
+ fr.finish();
+ assert !Request.anythingLeft(liveSettingsState): liveSettingsState.toString();
+
+ // Field defs:
+ JSONObject fieldsState = (JSONObject) o.get("fields");
+ JSONObject top = new JSONObject();
+ top.put("fields", fieldsState);
+ r = new Request(null, null, top, RegisterFieldHandler.TYPE);
+ fr = ((RegisterFieldHandler) globalState.getHandler("registerFields")).handle(this, r, null);
+ assert !Request.anythingLeft(top): top;
+ fr.finish();
+
+ for(FieldDef fd : fields.values()) {
+ if (fd.liveValuesIDField != null) {
+ liveFieldValues.put(fd.name, new StringLiveFieldValues(manager, fd.liveValuesIDField, fd.name));
+ }
}
- }
- // Suggesters:
- ((BuildSuggestHandler) globalState.getHandler("buildSuggest")).load(this, (JSONObject) o.get("suggest"));
+ // Suggesters:
+ ((BuildSuggestHandler) globalState.getHandler("buildSuggest")).load(this, (JSONObject) o.get("suggest"));
+ } catch (Exception e) {
+ throw new IOException(e);
+ }
}
/** Prunes stale searchers. */
@@ -1020,21 +1007,53 @@ public class IndexState implements Close
return (Boolean) o;
}
+ private void initSaveLoadState() throws IOException {
+ File stateDirFile;
+ if (rootDir != null) {
+ stateDirFile = new File(rootDir, "state");
+ //if (!stateDirFile.exists()) {
+ //stateDirFile.mkdirs();
+ //}
+ } else {
+ stateDirFile = null;
+ }
+
+ Directory stateDir = df.open(stateDirFile);
+
+ saveLoadGenRefCounts = new SaveLoadRefCounts(stateDir);
+
+ // Snapshot ref counts:
+ genRefCounts = saveLoadGenRefCounts.load();
+ if (genRefCounts == null) {
+ genRefCounts = new HashMap<Long,Integer>();
+ }
+
+ saveLoadState = new SaveLoadState(stateDir);
+
+ JSONObject priorState = saveLoadState.load();
+ if (priorState != null) {
+ load((JSONObject) priorState.get("state"));
+ }
+ }
+
/** Start this index. */
- public synchronized void start() throws IOException {
+ public synchronized void start() throws Exception {
if (writer != null) {
// throw new IllegalStateException("index \"" + name + "\" was already started");
return;
}
+ //System.out.println("IndexState.start name=" + name);
+
boolean success = false;
try {
- File indexDirFile = new File(rootDir, "index");
- if (isNew) {
- indexDirFile.mkdirs();
+ if (saveLoadState == null) {
+ initSaveLoadState();
}
+
+ File indexDirFile = new File(rootDir, "index");
origIndexDir = df.open(indexDirFile);
if (!(origIndexDir instanceof RAMDirectory)) {
@@ -1049,17 +1068,27 @@ public class IndexState implements Close
indexDir = origIndexDir;
}
- File taxoDirFile = new File(rootDir, "taxonomy");
- if (isNew) {
- taxoDirFile.mkdirs();
+ // Rather than rely on IndexWriter/TaxonomyWriter to
+ // figure out if an index is new or not by passing
+ // CREATE_OR_APPEND (which can be dangerous), we
+ // alyready know the intention from the app (whether
+ // it called createIndex vs openIndex), so we make it
+ // explicit here:
+ IndexWriterConfig.OpenMode openMode;
+ if (doCreate) {
+ openMode = IndexWriterConfig.OpenMode.CREATE;
+ } else {
+ openMode = IndexWriterConfig.OpenMode.APPEND;
}
+
+ File taxoDirFile = new File(rootDir, "taxonomy");
taxoDir = df.open(taxoDirFile);
taxoSnapshots = new PersistentSnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy(),
taxoDir,
- IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
+ openMode);
- taxoWriter = new DirectoryTaxonomyWriter(taxoDir) {
+ taxoWriter = new DirectoryTaxonomyWriter(taxoDir, openMode) {
@Override
protected IndexWriterConfig createIndexWriterConfig(OpenMode openMode) {
IndexWriterConfig iwc = super.createIndexWriterConfig(openMode);
@@ -1084,7 +1113,7 @@ public class IndexState implements Close
}
iwc.setSimilarity(sim);
- iwc.setOpenMode(isNew ? IndexWriterConfig.OpenMode.CREATE : IndexWriterConfig.OpenMode.APPEND);
+ iwc.setOpenMode(openMode);
iwc.setRAMBufferSizeMB(indexRAMBufferSizeMB);
iwc.setMergedSegmentWarmer(new SimpleMergedSegmentWarmer(iwc.getInfoStream()));
@@ -1248,7 +1277,9 @@ public class IndexState implements Close
/** Delete this index. */
public void deleteIndex() throws IOException {
- deleteAllFiles(rootDir);
+ if (rootDir != null) {
+ deleteAllFiles(rootDir);
+ }
globalState.deleteIndex(name);
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/ServerCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/ServerCodec.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/ServerCodec.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/ServerCodec.java Mon Jan 13 12:42:56 2014
@@ -57,9 +57,9 @@ public class ServerCodec extends Codec {
try {
pf = state.getField(field).postingsFormat;
} catch (IllegalArgumentException iae) {
+ // The indexed facets field will have drill-downs,
+ // which will pull the postings format:
if (state.internalFacetFieldNames.contains(field)) {
- // nocommit why is anything asking for the postings
- // format for $facets!?
pf = DEFAULT_POSTINGS_FORMAT;
} else {
throw iae;
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/AddDocumentHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/AddDocumentHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/AddDocumentHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/AddDocumentHandler.java Mon Jan 13 12:42:56 2014
@@ -26,8 +26,10 @@ import java.util.concurrent.CopyOnWriteA
import org.apache.lucene.document.BinaryDocValuesField;
import org.apache.lucene.document.Document;
+import org.apache.lucene.document.DoubleDocValuesField;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType;
+import org.apache.lucene.document.FloatDocValuesField;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.document.SortedDocValuesField;
import org.apache.lucene.document.SortedSetDocValuesField;
@@ -164,9 +166,11 @@ public class AddDocumentHandler extends
}
} else if (fd.fieldType.docValueType() == DocValuesType.NUMERIC) {
if (fd.valueType.equals("float")) {
- doc.add(new NumericDocValuesField(fd.name, Float.floatToRawIntBits(((Number) o).floatValue())));
+ //doc.add(new NumericDocValuesField(fd.name, Float.floatToRawIntBits(((Number) o).floatValue())));
+ doc.add(new FloatDocValuesField(fd.name, ((Number) o).floatValue()));
} else if (fd.valueType.equals("double")) {
- doc.add(new NumericDocValuesField(fd.name, Double.doubleToRawLongBits(((Number) o).doubleValue())));
+ //doc.add(new NumericDocValuesField(fd.name, Double.doubleToRawLongBits(((Number) o).doubleValue())));
+ doc.add(new DoubleDocValuesField(fd.name, ((Number) o).doubleValue()));
} else if (fd.valueType.equals("int")) {
doc.add(new NumericDocValuesField(fd.name, ((Number) o).intValue()));
} else if (fd.valueType.equals("long")) {
@@ -184,6 +188,7 @@ public class AddDocumentHandler extends
f.setBoost(boost);
doc.add(f);
}
+ //System.out.println("add doc: " + doc);
}
/** Used by plugins to process a document after it was
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateIndexHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateIndexHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateIndexHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateIndexHandler.java Mon Jan 13 12:42:56 2014
@@ -33,8 +33,6 @@ import org.apache.lucene.server.params.S
public class CreateIndexHandler extends Handler {
private static StructType TYPE = new StructType(
new Param("indexName", "Index name", new StringType()),
- // nocommit what about RAMDir...
- // nocommit should we only allow rootDir "under" the globalRoot?
new Param("rootDir", "Filesystem path where all state is stored", new StringType()));
/** Sole constructor. */
@@ -59,13 +57,18 @@ public class CreateIndexHandler extends
if (!IndexState.isSimpleName(indexName)) {
r.fail("indexName", "invalid indexName \"" + indexName + "\": must be [a-zA-Z_][a-zA-Z0-9]*");
}
- final String rootDir = r.getString("rootDir");
+ final File rootDir;
+ if (r.hasParam("rootDir")) {
+ rootDir = new File(r.getString("rootDir"));
+ } else {
+ rootDir = null;
+ }
return new FinishRequest() {
@Override
public String finish() throws Exception {
try {
- globalState.createIndex(indexName, new File(rootDir));
+ globalState.createIndex(indexName, rootDir);
} catch (IllegalArgumentException iae) {
r.fail("invalid indexName \"" + indexName + "\": " + iae.toString());
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateSnapshotHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateSnapshotHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateSnapshotHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/CreateSnapshotHandler.java Mon Jan 13 12:42:56 2014
@@ -71,12 +71,12 @@ public class CreateSnapshotHandler exten
@Override
public FinishRequest handle(final IndexState state, Request r, Map<String,List<String>> params) throws Exception {
+ state.verifyStarted(r);
+
if (!state.hasCommit()) {
r.fail("this index has no commits; please call commit first");
}
- state.verifyStarted(r);
-
// nocommit not thread safe vs commitHandler?
final boolean openSearcher = r.getBoolean("openSearcher");
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java Mon Jan 13 12:42:56 2014
@@ -300,9 +300,9 @@ public class RegisterFieldHandler extend
"long", "Long value.",
// nocommit name this "dynamic" instead of "virtual"?
"virtual", "Virtual field defined with a JavaScript expression.",
+ // nocommit need tests for internal:
"internal", "Internal field, currently only for holding indexed facets data.")),
- // nocommit rename to "search"? ie, "I will search on/by this field's values"
- new Param("index", "True if the value should be indexed.", new BooleanType(), false),
+ new Param("search", "True if the value should be available for searching (or numeric range searching, for a numeric field).", new BooleanType(), false),
new Param("tokenize", "True if the value should be tokenized.", new BooleanType(), true),
new Param("store", "True if the value should be stored.", new BooleanType(), false),
new Param("multiValued", "True if this field may sometimes have more than one value.", new BooleanType(), false),
@@ -431,13 +431,16 @@ public class RegisterFieldHandler extend
boolean sorted = f.getBoolean("sort");
boolean grouped = f.getBoolean("group");
- // nocommit: user must say which highlighter? ie, we
- // may index offsets into postings, or term vectors...
+ // TODO: current we only highlight using
+ // PostingsHighlighter; if we enable others (that use
+ // term vectors), we need to fix this so app specifies
+ // up front which highlighter(s) it wants to use at
+ // search time:
boolean highlighted = f.getBoolean("highlight");
if (highlighted) {
if (type.equals("text") == false && type.equals("atom") == false) {
- f.fail("highlighted", "only type=text or type=atom fields can be highlighted");
+ f.fail("highlight", "only type=text or type=atom fields can have highlight=true");
}
}
@@ -503,24 +506,18 @@ public class RegisterFieldHandler extend
if (f.hasParam("store")) {
ft.setStored(f.getBoolean("store"));
if (!ft.stored() && highlighted) {
- f.fail("store", "store cannot be False when highlighted is True");
+ f.fail("store", "store=false is not allowed when highlight=true");
}
}
- if (f.hasParam("index")) {
- ft.setIndexed(f.getBoolean("index"));
+ if (f.hasParam("search")) {
+ ft.setIndexed(f.getBoolean("search"));
}
if (f.hasParam("analyzer") && !ft.indexed()) {
- f.fail("analyzer", "no analyzer allowed when indexed is false");
+ f.fail("analyzer", "no analyzer allowed when search=false");
}
- // nocommit hierarchical facet field cannot be indexed &
- // stored; make test & check that here
-
- // nocommit make sure a useless field (not indexed,
- // stored, dv'd nor faceted) is detected!
-
if (type.equals("text") || type.equals("atom")) {
if (ft.indexed()) {
@@ -623,10 +620,10 @@ public class RegisterFieldHandler extend
if (type.equals("text") && ft.indexed()) {
if (indexAnalyzer == null) {
- f.fail("indexAnalyzer", "field=\"" + name + "\": either analyzer or indexAnalyzer must be specified for an indexed text field");
+ f.fail("indexAnalyzer", "either analyzer or indexAnalyzer must be specified for an indexed text field");
}
if (searchAnalyzer == null) {
- f.fail("searchAnalyzer", "field=\"" + name + "\": either analyzer or searchAnalyzer must be specified for an indexed text field");
+ f.fail("searchAnalyzer", "either analyzer or searchAnalyzer must be specified for an indexed text field");
}
}
@@ -673,18 +670,29 @@ public class RegisterFieldHandler extend
}
String facet = f.getEnum("facet");
- if (facet.equals("hierarchy") && type.equals("atom") && (ft.indexed() || ft.stored())) {
- f.fail("facet", "facet=hierarchy fields cannot have type atom if it's indexed or stored");
- }
- if (facet.equals("numericRange")) {
+ if (facet.equals("hierarchy")) {
+ if (highlighted) {
+ f.fail("facet", "facet=hierarchy fields cannot have highlight=true");
+ }
+ if (ft.indexed()) {
+ f.fail("facet", "facet=hierarchy fields cannot have search=true");
+ }
+ if (ft.stored()) {
+ f.fail("facet", "facet=hierarchy fields cannot have store=true");
+ }
+ } else if (facet.equals("numericRange")) {
if (!type.equals("long") && !type.equals("int") && !type.equals("float") && !type.equals("double")) {
f.fail("facet", "numericRange facets only applies to numeric types");
}
if (!ft.indexed()) {
- f.fail("index", "facet=numericRange fields must have index=true");
+ f.fail("search", "facet=numericRange fields must have search=true");
}
// We index the field as NumericField, for drill-down, and store doc values, for dynamic facet counting
ft.setDocValueType(DocValuesType.NUMERIC);
+ } else if (facet.equals("no")) {
+ if (ft.indexed() == false && ft.stored() == false && ft.docValueType() == null) {
+ f.fail("field does nothing: it's neither searched, stored, sorted, grouped, highlighted nor faceted");
+ }
}
ft.freeze();
@@ -733,7 +741,7 @@ public class RegisterFieldHandler extend
// nocommit charFilters
Tokenizer tokenizer;
- // nocommit use java7 string switch:
+ // nocommit use analysis factories
if (pr.name.equals("StandardTokenizer")) {
tokenizer = new StandardTokenizer(matchVersion, reader);
((StandardTokenizer) tokenizer).setMaxTokenLength(pr.r.getInt("maxTokenLength"));
@@ -804,7 +812,7 @@ public class RegisterFieldHandler extend
for(Object o : chain.getList("tokenFilters")) {
Request sub = (Request) o;
pr = sub.getPoly("class");
- // nocommit use java7 string switch:
+ // nocommit use analysis factories
if (pr.name.equals("StandardFilter")) {
last = new StandardFilter(matchVersion, last);
} else if (pr.name.equals("EnglishPossessiveFilter")) {
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.java Mon Jan 13 12:42:56 2014
@@ -44,6 +44,8 @@ import org.apache.lucene.facet.Facets;
import org.apache.lucene.facet.FacetsCollector;
import org.apache.lucene.facet.FacetsConfig;
import org.apache.lucene.facet.LabelAndValue;
+import org.apache.lucene.facet.range.DoubleRange;
+import org.apache.lucene.facet.range.DoubleRangeFacetCounts;
import org.apache.lucene.facet.range.LongRange;
import org.apache.lucene.facet.range.LongRangeFacetCounts;
import org.apache.lucene.facet.sortedset.SortedSetDocValuesFacetCounts;
@@ -397,9 +399,9 @@ public class SearchHandler extends Handl
new Param("numericRanges", "Custom numeric ranges. Field must be indexed with facet=numericRange.",
new ListType(
new StructType(new Param("label", "Label for this range", new StringType()),
- new Param("min", "Min value for the range", new LongType()),
+ new Param("min", "Min value for the range", new OrType(new LongType(), new FloatType())),
new Param("minInclusive", "True if the min value is inclusive", new BooleanType()),
- new Param("max", "Max value for the range", new LongType()),
+ new Param("max", "Max value for the range", new OrType(new LongType(), new FloatType())),
new Param("maxInclusive", "True if the max value is inclusive", new BooleanType())))),
new Param("autoDrillDown", "True if single-child facet should be auto-expanded (not yet implemented!).", new BooleanType()),
new Param("useOrdsCache", "True if the ordinals cache should be used.", new BooleanType(), false),
@@ -1281,7 +1283,7 @@ public class SearchHandler extends Handl
} else if (pr.name.equals("MultiFieldQueryParser")) {
Map<String,Float> fieldsAndWeights = parseFieldsAndWeights(state, pr.r, "fields");
- System.out.println("boosts: "+ fieldsAndWeights);
+ //System.out.println("boosts: "+ fieldsAndWeights);
String[] fields = new String[fieldsAndWeights.size()];
int upto=0;
for(String field2 : fieldsAndWeights.keySet()) {
@@ -1660,9 +1662,30 @@ public class SearchHandler extends Handl
c,
ranges);
facetResult = facets.getTopChildren(0, fd.name);
+ } else if (fd.valueType.equals("float") || fd.valueType.equals("double")) {
+ List<Object> rangeList = r2.getList("numericRanges");
+ DoubleRange[] ranges = new DoubleRange[rangeList.size()];
+ for(int i=0;i<ranges.length;i++) {
+ Request r3 = (Request) rangeList.get(i);
+ ranges[i] = new DoubleRange(r3.getString("label"),
+ r3.getDouble("min"),
+ r3.getBoolean("minInclusive"),
+ r3.getDouble("max"),
+ r3.getBoolean("maxInclusive"));
+ }
+
+ FacetsCollector c = dsDimMap.get(fd.name);
+ if (c == null) {
+ c = drillDowns;
+ }
+
+ Facets facets = new DoubleRangeFacetCounts(fd.name,
+ c,
+ ranges);
+ facetResult = facets.getTopChildren(0, fd.name);
} else {
// nocommit float/double too
- r2.fail("numericRanges", "only int/long currently supported");
+ r2.fail("numericRanges", "field type must be numeric; got: " + fd.valueType);
// Dead code but compiler disagrees:
facetResult = null;
@@ -2089,13 +2112,6 @@ public class SearchHandler extends Handl
// nocommit can we do better? sometimes downgrade
// to DDQ not DS?
- // nocommit improve this: we can use the cache if
- // there's a single DS dim, for just that dim
- // (other dims must recompute)
- // nocommit turn this back on but ... this causes
- // NPEs when drillDownFacet tries to fill
-
- //System.out.println("useCache=" + useFacetsCache + " cacheHit=" + facetsCacheHit);
long searchStartTime = System.nanoTime();
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/StartIndexHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/StartIndexHandler.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/StartIndexHandler.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/StartIndexHandler.java Mon Jan 13 12:42:56 2014
@@ -56,7 +56,7 @@ public class StartIndexHandler extends H
public FinishRequest handle(final IndexState state, final Request r, Map<String,List<String>> params) throws Exception {
return new FinishRequest() {
@Override
- public String finish() throws IOException {
+ public String finish() throws Exception {
long t0 = System.nanoTime();
state.start();
JSONObject result = new JSONObject();
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/EnumType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/EnumType.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/EnumType.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/EnumType.java Mon Jan 13 12:42:56 2014
@@ -17,15 +17,16 @@ package org.apache.lucene.server.params;
* limitations under the License.
*/
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
/** Type for an enumeration. */
public class EnumType extends Type {
- /** Enum labels. */
- final String[] values;
- /** Enum descriptions (English). */
- final String[] descriptions;
+ /** Maps label to description. */
+ final Map<String,String> values;
/** Sole constructor, values is alternating label1,
* desc1, label2, desc2, ... */
@@ -33,11 +34,9 @@ public class EnumType extends Type {
if ((values.length & 1) != 0) {
throw new IllegalArgumentException("input must be value/desc pairs");
}
- this.values = new String[values.length/2];
- this.descriptions = new String[values.length/2];
+ this.values = new HashMap<String,String>();
for(int i=0;i<values.length;i+=2) {
- this.values[i/2] = values[i];
- this.descriptions[i/2] = values[i+1];
+ this.values.put(values[i], values[i+1]);
}
}
@@ -46,12 +45,9 @@ public class EnumType extends Type {
if (!(o instanceof String)) {
throw new IllegalArgumentException("expected String but got " + o.getClass());
}
- // nocommit use Set?
- for(int i=0;i<values.length;i++) {
- if (o.equals(values[i])) {
- return;
- }
+ if (values.containsKey(o) == false) {
+ String[] keys = new ArrayList<String>(values.keySet()).toArray(new String[values.size()]);
+ throw new IllegalArgumentException("expected one of " + Arrays.toString(keys) + " but got \"" + o + "\"");
}
- throw new IllegalArgumentException("expected one of " + Arrays.toString(values) + " but got \"" + o + "\"");
}
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/Request.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/Request.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/Request.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/params/Request.java Mon Jan 13 12:42:56 2014
@@ -187,6 +187,36 @@ public class Request {
}
}
+ /** Retrieve a double parameter. Once this is called
+ * for a given parameter it cannot be called again on
+ * that parameter. */
+ public double getDouble(String name) {
+ Param p = type.params.get(name);
+ assert p != null: "name \"" + name + "\" is not a known parameter";
+ // assert p.type instanceof FloatType: "name \"" + name + "\" is not FloatType: got " + p.type;
+
+ Object v = params.get(name);
+ if (v == null) {
+ // Request didn't provide it:
+ if (p.defaultValue != null) {
+ // Fallback to default
+ return ((Number) p.defaultValue).doubleValue();
+ } else {
+ fail(name, "required parameter \"" + name + "\" is missing");
+ // dead code but compiler disagrees:
+ return 0;
+ }
+ } else {
+ try {
+ p.type.validate(v);
+ } catch (IllegalArgumentException iae) {
+ fail(name, iae.getMessage(), iae);
+ }
+ params.remove(name);
+ return ((Number) v).doubleValue();
+ }
+ }
+
/** Retrieve an int parameter. Once this is called
* for a given parameter it cannot be called again on
* that parameter. */
@@ -222,7 +252,7 @@ public class Request {
public long getLong(String name) {
Param p = type.params.get(name);
assert p != null: "name \"" + name + "\" is not a known parameter";
- assert p.type instanceof LongType: "name \"" + name + "\" is not LongType: got " + p.type;
+ //assert p.type instanceof LongType: "name \"" + name + "\" is not LongType: got " + p.type;
Object v = params.get(name);
if (v == null) {
@@ -253,18 +283,14 @@ public class Request {
return v instanceof String;
}
- // nocommit bad that enum values is not strongly typed
- // here ... maybe we need isEnumValue(name, X)? having
- // else/if chain in the code can hide a sneaky bug
-
/** Retrieve a string parameter. Once this is called
* for a given parameter it cannot be called again on
* that parameter. */
public String getString(String name) {
Param p = type.params.get(name);
assert p != null: "name \"" + name + "\" is not a known parameter";
+ // Use getEnum instead:
assert !(p.type instanceof EnumType);
- //assert p.type instanceof StringType: "name \"" + name + "\" is not StringType: got " + p.type;
Object v = params.get(name);
if (v == null) {
@@ -281,6 +307,11 @@ public class Request {
if ((v instanceof String) == false) {
fail(name, "expected String but got " + toSimpleString(v.getClass()));
}
+ try {
+ p.type.validate(v);
+ } catch (IllegalArgumentException iae) {
+ fail(name, iae.getMessage(), iae);
+ }
params.remove(name);
return (String) v;
}
@@ -294,10 +325,6 @@ public class Request {
* for a given parameter it cannot be called again on
* that parameter. */
public String getEnum(String name) {
- // nocommit bad that enum values is not strongly typed
- // here ... maybe we need isEnumValue(name, X)? having
- // else/if chain in the code can hide a sneaky bug
-
Param p = type.params.get(name);
assert p != null: "name \"" + name + "\" is not a known parameter";
assert p.type instanceof EnumType: "name \"" + name + "\" is not EnumType: got " + p.type;
@@ -314,6 +341,7 @@ public class Request {
return null;
}
} else {
+ // Make sure the value is valid for this enum:
try {
p.type.validate(v);
} catch (IllegalArgumentException iae) {
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/ServerBaseTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/ServerBaseTestCase.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/ServerBaseTestCase.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/ServerBaseTestCase.java Mon Jan 13 12:42:56 2014
@@ -473,5 +473,16 @@ public abstract class ServerBaseTestCase
return sb.toString();
}
+
+ protected void assertFailsWith(String command, String args, String fragment) throws Exception {
+ try {
+ send(command, args);
+ fail("did not hit expected exception");
+ } catch (IOException ioe) {
+ if (ioe.getMessage().contains(fragment) == false) {
+ fail("expected: " + fragment + "\nactual: \"" + ioe.getMessage());
+ }
+ }
+ }
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestAddDocuments.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestAddDocuments.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestAddDocuments.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestAddDocuments.java Mon Jan 13 12:42:56 2014
@@ -42,7 +42,7 @@ public class TestAddDocuments extends Se
}
private static void registerFields() throws Exception {
- send("registerFields", "{fields: {docType: {type: atom}, name: {type: atom}, country: {type: atom}, skill: {type: atom}, year: {type: int}}}");
+ send("registerFields", "{fields: {docType: {type: atom}, name: {type: atom}, country: {type: atom}, skill: {type: atom}}}");
}
private JSONObject getResume(String name, String country) {
@@ -58,7 +58,7 @@ public class TestAddDocuments extends Se
private JSONObject getJob(String skill, int year) {
JSONObject o = new JSONObject();
o.put("skill", skill);
- o.put("year", year);
+ //o.put("year", year);
JSONObject o2 = new JSONObject();
o2.put("fields", o);
return o2;
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestBooleanFieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestBooleanFieldType.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestBooleanFieldType.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestBooleanFieldType.java Mon Jan 13 12:42:56 2014
@@ -41,8 +41,8 @@ public class TestBooleanFieldType extend
private static void registerFields() throws Exception {
JSONObject o = new JSONObject();
put(o, "id", "{type: int, store: true, postingsFormat: Memory}");
- put(o, "flagStored", "{type: boolean, store: true, index: false}");
- put(o, "flagIndexed", "{type: boolean, store: false, index: true}");
+ put(o, "flagStored", "{type: boolean, store: true, search: false}");
+ put(o, "flagIndexed", "{type: boolean, store: false, search: true}");
JSONObject o2 = new JSONObject();
o2.put("indexName", "index");
o2.put("fields", o);
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestFacets.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestFacets.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestFacets.java Mon Jan 13 12:42:56 2014
@@ -52,19 +52,21 @@ public class TestFacets extends ServerBa
private static void registerFields() throws Exception {
JSONObject o = new JSONObject();
put(o, "body", "{type: text, highlight: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43}, similarity: {class: BM25Similarity, b: 0.15}}");
- put(o, "price", "{type: float, sort: true, index: true, store: true}");
- put(o, "longField", "{type: long, index: true, facet: numericRange}");
+ put(o, "price", "{type: float, sort: true, search: true, store: true}");
+ put(o, "longField", "{type: long, search: true, facet: numericRange}");
+ put(o, "doubleField", "{type: double, search: true, facet: numericRange}");
+ put(o, "floatField", "{type: float, search: true, facet: numericRange}");
put(o, "id", "{type: int, store: true, postingsFormat: Memory}");
- put(o, "date", "{type: atom, index: false, store: true}");
+ put(o, "date", "{type: atom, search: false, store: true}");
if (random().nextBoolean()) {
// Send facets to two different random fields:
String name = "x" + _TestUtil.randomSimpleString(random(), 1, 10);
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy, facetIndexFieldName: " + name + "}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy, facetIndexFieldName: " + name + "}");
if (VERBOSE) {
System.out.println("NOTE: send dateFacet to facetIndexFieldName=" + name);
}
name = "y" + _TestUtil.randomSimpleString(random(), 1, 10);
- put(o, "author", "{type: text, index: false, facet: flat, group: true, facetIndexFieldName: " + name + "}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true, facetIndexFieldName: " + name + "}");
if (VERBOSE) {
System.out.println("NOTE: send author to facetIndexFieldName=" + name);
}
@@ -72,16 +74,16 @@ public class TestFacets extends ServerBa
} else if (random().nextBoolean()) {
// Send facets to the same random field:
indexFacetField = "x" + _TestUtil.randomSimpleString(random(), 1, 10);
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy, facetIndexFieldName: " + indexFacetField + "}");
- put(o, "author", "{type: text, index: false, facet: flat, group: true, facetIndexFieldName: " + indexFacetField + "}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy, facetIndexFieldName: " + indexFacetField + "}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true, facetIndexFieldName: " + indexFacetField + "}");
if (VERBOSE) {
System.out.println("NOTE: send dateFacet to facetIndexFieldName=" + indexFacetField);
System.out.println("NOTE: send author to facetIndexFieldName=" + indexFacetField);
}
} else {
// Use default $facets field:
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy}");
- put(o, "author", "{type: text, index: false, facet: flat, group: true}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true}");
}
JSONObject o2 = new JSONObject();
o2.put("indexName", "index");
@@ -236,7 +238,7 @@ public class TestFacets extends ServerBa
assertEquals("[[\"top\",6],[\"Tom\",3],[\"Lisa\",2],[\"Bob\",1]]", getArray(o, "facets[0].counts").toString());
}
- public void testRangeFacets() throws Exception {
+ public void testLongRangeFacets() throws Exception {
deleteAllDocs();
long gen = -1;
for(int i=0;i<100;i++) {
@@ -249,6 +251,38 @@ public class TestFacets extends ServerBa
assertEquals(50, getInt(o, "facets[0].counts[2][1]"));
}
+ public void testDoubleRangeFacets() throws Exception {
+ deleteAllDocs();
+ long gen = -1;
+ for(int i=0;i<100;i++) {
+ gen = getLong(send("addDocument", "{fields: {doubleField: " + i + "}}"), "indexGen");
+ }
+ JSONObject o = send("search", "{facets: [{dim: doubleField, numericRanges: [{label: All, min: 0, max: 99, minInclusive: true, maxInclusive: true}, {label: Half, min: 0, max: 49, minInclusive: true, maxInclusive: true}]}], searcher: {indexGen: " + gen + "}}");
+ assertEquals("All", getString(o, "facets[0].counts[1][0]"));
+ assertEquals(100, getInt(o, "facets[0].counts[1][1]"));
+ assertEquals("Half", getString(o, "facets[0].counts[2][0]"));
+ assertEquals(50, getInt(o, "facets[0].counts[2][1]"));
+ }
+
+ // nocommit fails ... we need to add FloatRangeFacetCounts
+ // to lucene???
+
+ /*
+ public void testFloatRangeFacets() throws Exception {
+ deleteAllDocs();
+ long gen = -1;
+ for(int i=0;i<100;i++) {
+ gen = getLong(send("addDocument", "{fields: {floatField: " + i + "}}"), "indexGen");
+ }
+ JSONObject o = send("search", "{facets: [{dim: floatField, numericRanges: [{label: All, min: 0, max: 99, minInclusive: true, maxInclusive: true}, {label: Half, min: 0, max: 49, minInclusive: true, maxInclusive: true}]}], searcher: {indexGen: " + gen + "}}");
+ System.out.println("got" + get(o, "facets[0]"));
+ assertEquals("All", getString(o, "facets[0].counts[1][0]"));
+ assertEquals(100, getInt(o, "facets[0].counts[1][1]"));
+ assertEquals("Half", getString(o, "facets[0].counts[2][0]"));
+ assertEquals(50, getInt(o, "facets[0].counts[2][1]"));
+ }
+ */
+
public void testSortedSetDocValuesFacets() throws Exception {
curIndexName = "ssdvFacets";
_TestUtil.rmDir(new File(curIndexName));
@@ -258,14 +292,14 @@ public class TestFacets extends ServerBa
if (indexFacetField != null && random().nextBoolean()) {
// Send SSDV facets to same field as the taxo facets:
- send("registerFields", "{fields: {ssdv: {type: atom, index: false, store: false, facet: sortedSetDocValues, facetIndexFieldName: " + indexFacetField + "}}}");
+ send("registerFields", "{fields: {ssdv: {type: atom, search: false, store: false, facet: sortedSetDocValues, facetIndexFieldName: " + indexFacetField + "}}}");
} else if (random().nextBoolean()) {
// Send SSDV facets to a random index field:
String name = _TestUtil.randomSimpleString(random(), 1, 10);
- send("registerFields", "{fields: {ssdv: {type: atom, index: false, store: false, facet: sortedSetDocValues, facetIndexFieldName: " + name + "}}}");
+ send("registerFields", "{fields: {ssdv: {type: atom, search: false, store: false, facet: sortedSetDocValues, facetIndexFieldName: " + name + "}}}");
} else {
// Send SSDV facets to default field:
- send("registerFields", "{fields: {ssdv: {type: atom, index: false, store: false, facet: sortedSetDocValues}}}");
+ send("registerFields", "{fields: {ssdv: {type: atom, search: false, store: false, facet: sortedSetDocValues}}}");
}
// Verify error message:
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestGrouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestGrouping.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestGrouping.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestGrouping.java Mon Jan 13 12:42:56 2014
@@ -42,11 +42,11 @@ public class TestGrouping extends Server
private static void registerFields() throws Exception {
JSONObject o = new JSONObject();
put(o, "body", "{type: text, highlight: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43}, similarity: {class: BM25Similarity, b: 0.15}}");
- put(o, "price", "{type: float, sort: true, index: true, store: true}");
+ put(o, "price", "{type: float, sort: true, search: true, store: true}");
put(o, "id", "{type: int, store: true, postingsFormat: Memory}");
- put(o, "date", "{type: atom, index: false, store: true}");
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy}");
- put(o, "author", "{type: text, index: false, facet: flat, group: true}");
+ put(o, "date", "{type: atom, search: false, store: true}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true}");
JSONObject o2 = new JSONObject();
o2.put("fields", o);
o2.put("indexName", "index");
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestHighlight.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestHighlight.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestHighlight.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestHighlight.java Mon Jan 13 12:42:56 2014
@@ -43,11 +43,11 @@ public class TestHighlight extends Serve
private static void registerFields() throws Exception {
JSONObject o = new JSONObject();
put(o, "body", "{type: text, highlight: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43}, similarity: {class: BM25Similarity, b: 0.15}}");
- put(o, "price", "{type: float, sort: true, index: true, store: true}");
+ put(o, "price", "{type: float, sort: true, search: true, store: true}");
put(o, "id", "{type: int, store: true, postingsFormat: Memory}");
- put(o, "date", "{type: atom, index: false, store: true}");
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy}");
- put(o, "author", "{type: text, index: false, facet: flat, group: true}");
+ put(o, "date", "{type: atom, search: false, store: true}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true}");
// Register multi-valued field:
put(o, "authors", "{type: text, highlight: true, facet: flat, multiValued: true, analyzer: {matchVersion: LUCENE_43, class: StandardAnalyzer}}");
JSONObject o2 = new JSONObject();
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestIndexing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestIndexing.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestIndexing.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestIndexing.java Mon Jan 13 12:42:56 2014
@@ -48,10 +48,10 @@ public class TestIndexing extends Server
JSONObject o = new JSONObject();
put(o, "body", "{type: text, highlight: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43}, similarity: {class: BM25Similarity, b: 0.15}}");
put(o, "id", "{type: atom, store: true, postingsFormat: Memory}");
- put(o, "price", "{type: float, sort: true, index: true, store: true}");
- put(o, "date", "{type: atom, index: false, store: true}");
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy}");
- put(o, "author", "{type: text, index: false, facet: flat, store: true, group: true}");
+ put(o, "price", "{type: float, sort: true, search: true, store: true}");
+ put(o, "date", "{type: atom, search: false, store: true}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy}");
+ put(o, "author", "{type: text, search: false, facet: flat, store: true, group: true}");
put(o, "charCount", "{type: int, store: true}");
JSONObject o2 = new JSONObject();
o2.put("fields", o);
@@ -232,7 +232,7 @@ public class TestIndexing extends Server
public void testBoost() throws Exception {
_TestUtil.rmDir(new File("boost"));
curIndexName = "boost";
- send("createIndex", "{rootDir: boost}");
+ send("createIndex");
send("settings", "{directory: RAMDirectory, matchVersion: LUCENE_40}");
// Just to test index.ramBufferSizeMB:
send("liveSettings", "{index.ramBufferSizeMB: 20.0}");
@@ -256,7 +256,6 @@ public class TestIndexing extends Server
assertEquals("1", getString(result, "hits[0].fields.id"));
assertEquals("0", getString(result, "hits[1].fields.id"));
- send("stopIndex");
send("deleteIndex");
}
@@ -272,8 +271,10 @@ public class TestIndexing extends Server
public void testNormsFormat() throws Exception {
for(int i=0;i<2;i++) {
curIndexName = "normsFormat";
- _TestUtil.rmDir(new File(curIndexName));
- send("createIndex", "{rootDir: " + curIndexName + "}");
+ if (VERBOSE) {
+ System.out.println("\nTEST: createIndex");
+ }
+ send("createIndex");
String norms;
if (i == 0) {
norms = "normsFormat: Lucene42";
@@ -284,6 +285,9 @@ public class TestIndexing extends Server
send("registerFields",
"{fields: {id: {type: atom, store: true}," +
" body: {type: text, analyzer: StandardAnalyzer}}}");
+ if (VERBOSE) {
+ System.out.println("\nTEST: startIndex");
+ }
send("startIndex");
send("addDocument", "{fields: {id: '0', body: 'here is a test'}}");
long gen = getLong(send("addDocument", "{fields: {id: '1', body: 'here is a test again'}}"), "indexGen");
@@ -292,8 +296,100 @@ public class TestIndexing extends Server
assertEquals("0", getString(result, "hits[0].fields.id"));
assertEquals("1", getString(result, "hits[1].fields.id"));
- send("stopIndex");
+ if (VERBOSE) {
+ System.out.println("\nTEST: deleteIndex");
+ }
send("deleteIndex");
}
}
+
+ public void testOnlySettings() throws Exception {
+ for(int i=0;i<2;i++) {
+ curIndexName = "settings";
+ if (VERBOSE) {
+ System.out.println("\nTEST: create");
+ }
+ if (i == 0) {
+ send("createIndex");
+ } else {
+ File dir = new File(_TestUtil.getTempDir("recency"), "root");
+ send("createIndex", "{rootDir: " + dir.getAbsolutePath() + "}");
+ }
+ String dirImpl = i == 0 ? "RAMDirectory" : "FSDirectory";
+
+ if (VERBOSE) {
+ System.out.println("\nTEST: settings1");
+ }
+ send("settings", "{directory: " + dirImpl + ", matchVersion: LUCENE_40}");
+ send("registerFields", "{fields: {id: {type: atom, store: true}}}");
+ //send("stopIndex");
+ if (VERBOSE) {
+ System.out.println("\nTEST: settings2");
+ }
+ JSONObject result = send("settings");
+ assertEquals(dirImpl, getString(result, "directory"));
+ if (i == 1) {
+ // With FSDir, the index & settings should survive a
+ // server bounce, even if the index wasn't ever started:
+
+ if (VERBOSE) {
+ System.out.println("\nTEST: bounce");
+ }
+
+ shutdownServer();
+ startServer();
+
+ if (VERBOSE) {
+ System.out.println("\nTEST: settings3");
+ }
+ result = send("settings");
+ System.out.println("GOT: " + result);
+ assertEquals(dirImpl, getString(result, "directory"));
+ }
+ send("deleteIndex");
+ }
+ }
+
+ public void testIllegalRegisterFields() throws Exception {
+ // Cannot specify an analyzer with an atom field (it
+ // always uses KeywordAnalyzer):
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: atom, analyzer: WhitespaceAnalyzer}}}",
+ "registerFields > fields > bad > analyzer: no analyzer allowed with atom (it's hardwired to KeywordAnalyzer internally)");
+
+ // Must specify an analyzer with a text field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: text}}}",
+ "registerFields > fields > bad > indexAnalyzer: either analyzer or indexAnalyzer must be specified for an indexed text field");
+
+ // Must not specify an analyzer with a non-searched text field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: text, search: false, analyzer: WhitespaceAnalyzer}}}",
+ "registerFields > fields > bad > analyzer: no analyzer allowed when search=false");
+
+ // Must not disable store if highlight is true:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: text, store: false, highlight: true, analyzer: WhitespaceAnalyzer}}}",
+ "registerFields > fields > bad > store: store=false is not allowed when highlight=true");
+
+ // Cannot search a facet=hierarchy field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: atom, facet: hierarchy, search: true}}}",
+ "registerFields > fields > bad > facet: facet=hierarchy fields cannot have search=true");
+
+ // Cannot store a facet=hierarchy field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: atom, facet: hierarchy, search: false, store: true}}}",
+ "registerFields > fields > bad > facet: facet=hierarchy fields cannot have store=true");
+
+ // Cannot highlight a facet=hierarchy field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: atom, facet: hierarchy, highlight: true}}}",
+ "registerFields > fields > bad > facet: facet=hierarchy fields cannot have highlight=true");
+
+ // Cannot create a pointless do-nothing field:
+ assertFailsWith("registerFields",
+ "{fields: {bad: {type: atom, search: false, store: false}}}",
+ "registerFields > fields > bad: field does nothing: it's neither searched, stored, sorted, grouped, highlighted nor faceted");
+ }
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestLiveValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestLiveValues.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestLiveValues.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestLiveValues.java Mon Jan 13 12:42:56 2014
@@ -41,7 +41,7 @@ public class TestLiveValues extends Serv
private static void registerFields() throws Exception {
send("registerFields", "{fields: {id: {type: atom, store: true, postingsFormat: Memory}}}");
- send("registerFields", "{fields: {value: {type: atom, index: false, store: true, liveValues: id}}}");
+ send("registerFields", "{fields: {value: {type: atom, search: false, store: true, liveValues: id}}}");
}
// nocommit testDeletions
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSearch.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSearch.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSearch.java Mon Jan 13 12:42:56 2014
@@ -179,7 +179,7 @@ public class TestSearch extends ServerBa
_TestUtil.rmDir(new File("nrq"));
send("createIndex", "{rootDir: nrq}");
send("startIndex");
- send("registerFields", String.format(Locale.ROOT, "{fields: {nf: {type: %s, index: true}}}", type));
+ send("registerFields", String.format(Locale.ROOT, "{fields: {nf: {type: %s, search: true}}}", type));
send("addDocument", "{fields: {nf: 5}}");
send("addDocument", "{fields: {nf: 10}}");
long gen = getLong(send("addDocument", "{fields: {nf: 17}}"), "indexGen");
@@ -295,7 +295,7 @@ public class TestSearch extends ServerBa
File dir = new File(_TestUtil.getTempDir("recency"), "root");
send("createIndex", "{rootDir: " + dir.getAbsolutePath() + "}");
send("startIndex");
- send("registerFields", "{fields: {timestamp: {type: long, index: false, sort: true}, body: {type: text, analyzer: StandardAnalyzer}}}");
+ send("registerFields", "{fields: {timestamp: {type: long, search: false, sort: true}, body: {type: text, analyzer: StandardAnalyzer}}}");
long t = System.currentTimeMillis()/1000;
send("addDocument", "{fields: {body: 'this is some text', timestamp: " + (t-100) + "}}");
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestServer.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestServer.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestServer.java Mon Jan 13 12:42:56 2014
@@ -47,10 +47,10 @@ public class TestServer extends ServerBa
JSONObject o = new JSONObject();
put(o, "body", "{type: text, highlight: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43}, similarity: {class: BM25Similarity, b: 0.15}}");
put(o, "id", "{type: int, store: true, postingsFormat: Memory}");
- put(o, "price", "{type: float, sort: true, index: true, store: true}");
- put(o, "date", "{type: atom, index: false, store: true}");
- put(o, "dateFacet", "{type: atom, index: false, store: false, facet: hierarchy}");
- put(o, "author", "{type: text, index: false, facet: flat, group: true}");
+ put(o, "price", "{type: float, sort: true, search: true, store: true}");
+ put(o, "date", "{type: atom, search: false, store: true}");
+ put(o, "dateFacet", "{type: atom, search: false, store: false, facet: hierarchy}");
+ put(o, "author", "{type: text, search: false, facet: flat, group: true}");
JSONObject o2 = new JSONObject();
o2.put("indexName", "index");
o2.put("fields", o);
@@ -248,7 +248,7 @@ public class TestServer extends ServerBa
public void testMultiValuedString() throws Exception {
deleteAllDocs();
- send("registerFields", "{fields: {authors: {type: text, index: true, store: true, facet: flat, multiValued: true, analyzer: {matchVersion: LUCENE_43, class: StandardAnalyzer}}}}");
+ send("registerFields", "{fields: {authors: {type: text, search: true, store: true, facet: flat, multiValued: true, analyzer: {matchVersion: LUCENE_43, class: StandardAnalyzer}}}}");
JSONObject result = send("addDocument", "{fields: {authors: [Bob, Lisa]}}");
@@ -263,7 +263,7 @@ public class TestServer extends ServerBa
public void testMultiValuedNumeric() throws Exception {
deleteAllDocs();
- send("registerFields", "{fields: {ratings: {type: int, index: true, store: true, multiValued: true}}}");
+ send("registerFields", "{fields: {ratings: {type: int, search: true, store: true, multiValued: true}}}");
JSONObject result = send("addDocument", "{fields: {body: 'here is a test', ratings: [17, 22]}}");
@@ -294,7 +294,7 @@ public class TestServer extends ServerBa
public void testStandardAnalyzerNoStopWords() throws Exception {
deleteAllDocs();
- send("registerFields", "{fields: {aTextField2: {type: text, index: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43, stopWords: []}}}}");
+ send("registerFields", "{fields: {aTextField2: {type: text, search: true, store: true, analyzer: {class: StandardAnalyzer, matchVersion: LUCENE_43, stopWords: []}}}}");
JSONObject result = send("addDocument", "{fields: {aTextField2: 'here is a test'}}");
long indexGen = getLong(result, "indexGen");
@@ -310,7 +310,7 @@ public class TestServer extends ServerBa
public void testEnglishAnalyzerNoStopWords() throws Exception {
deleteAllDocs();
- send("registerFields", "{fields: {aTextField3: {type: text, index: true, store: true, analyzer: {class: EnglishAnalyzer, matchVersion: LUCENE_43, stopWords: []}}}}");
+ send("registerFields", "{fields: {aTextField3: {type: text, search: true, store: true, analyzer: {class: EnglishAnalyzer, matchVersion: LUCENE_43, stopWords: []}}}}");
JSONObject result = send("addDocument", "{fields: {aTextField3: 'the cats in the hat'}}");
long indexGen = getLong(result, "indexGen");
@@ -391,4 +391,7 @@ public class TestServer extends ServerBa
// nocommit need test case that screws up adding bulk docs
// (eg category path with empty string component) and
// verifies the error "comes through"
+
+ // nocommit need stress test that makes some index
+ // thousands of times to make sure nothing leaks...
}
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSnapshots.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSnapshots.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSnapshots.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSnapshots.java Mon Jan 13 12:42:56 2014
@@ -44,7 +44,7 @@ public class TestSnapshots extends Serve
}
private static void registerFields() throws Exception {
- send("registerFields", "{fields: {body: {type: text, analyzer: {class: EnglishAnalyzer, matchVersion: LUCENE_43}}, id: {type: atom, store: true}, facet: {type: atom, index: false, facet: flat}}}");
+ send("registerFields", "{fields: {body: {type: text, analyzer: {class: EnglishAnalyzer, matchVersion: LUCENE_43}}, id: {type: atom, store: true}, facet: {type: atom, search: false, facet: flat}}}");
}
public void testBasic() throws Exception {
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java Mon Jan 13 12:42:56 2014
@@ -171,9 +171,9 @@ public class TestSuggest extends ServerB
send("settings", "{directory: FSDirectory, matchVersion: LUCENE_46}");
send("startIndex");
send("registerFields",
- "{fields: {text: {type: text, store: true, index: false}," +
- "weight: {type: float, store: true, index: false}," +
- "payload: {type: text, store: true, index: false}}}");
+ "{fields: {text: {type: text, store: true, search: false}," +
+ "weight: {type: float, store: true, search: false}," +
+ "payload: {type: text, store: true, search: false}}}");
send("addDocument", "{fields: {text: 'the cat meows', weight: 1, payload: 'payload1'}}");
long indexGen = getLong(send("addDocument", "{fields: {text: 'the dog barks', weight: 2, payload: 'payload2'}}"), "indexGen");
@@ -207,9 +207,9 @@ public class TestSuggest extends ServerB
send("startIndex");
send("registerFields",
"{" +
- "fields: {text: {type: text, store: true, index: false}," +
+ "fields: {text: {type: text, store: true, search: false}," +
"negWeight: {type: float, sort: true}," +
- "payload: {type: text, store: true, index: false}}}");
+ "payload: {type: text, store: true, search: false}}}");
send("addDocument", "{fields: {text: 'the cat meows', negWeight: -1, payload: 'payload1'}}");
long indexGen = getLong(send("addDocument", "{fields: {text: 'the dog barks', negWeight: -2, payload: 'payload2'}}"), "indexGen");
Modified: lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestVirtualFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestVirtualFields.java?rev=1557694&r1=1557693&r2=1557694&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestVirtualFields.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/test/org/apache/lucene/server/TestVirtualFields.java Mon Jan 13 12:42:56 2014
@@ -46,7 +46,7 @@ public class TestVirtualFields extends S
put(o, "text", "{type: text, analyzer: WhitespaceAnalyzer}");
put(o, "logboost", "{type: virtual, expression: ln(boost)}");
put(o, "scoreboost", "{type: virtual, expression: _score+ln(boost)}");
- put(o, "id", "{type: int, sort: true, store: true, index: false}");
+ put(o, "id", "{type: int, sort: true, store: true, search: false}");
JSONObject o2 = new JSONObject();
o2.put("fields", o);
send("registerFields", o2);