Skip to content

Commit 7f92eee

Browse files
committed
get tests passing again; fix some jirasearch issues
1 parent 2482efc commit 7f92eee

9 files changed

+72
-52
lines changed

build.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424

2525
testDeps = [
2626
('de.thetaphi', 'forbiddenapis', '2.2'),
27-
('com.carrotsearch.randomizedtesting', 'junit4-ant', '2.0.13'),
28-
('com.carrotsearch.randomizedtesting', 'randomizedtesting-runner', '2.3.4'),
27+
('com.carrotsearch.randomizedtesting', 'junit4-ant', '2.4.0'),
28+
('com.carrotsearch.randomizedtesting', 'randomizedtesting-runner', '2.4.0'),
2929
('junit', 'junit', '4.10')
3030
]
3131

@@ -185,7 +185,7 @@ def run(self):
185185
s = s[:s.find('(')]
186186
message('\nNOTE: test case done: %.3f sec for %s\n' % (event[1]['executionTime']/1000., s))
187187
elif event[0] in ('TEST_FAILURE', 'SUITE_FAILURE'):
188-
details = event[1]['failure']
188+
details = event[1]
189189
s = '\n!! %s.%s FAILED !!:\n\n' % (job[25:], testCaseName)
190190
s += ''.join(pendingOutput)
191191
if 'message' in details:
@@ -199,7 +199,8 @@ def run(self):
199199
elif event[0] == 'TEST_STARTED':
200200
self.testCount += 1
201201
testCaseFailed = False
202-
testCaseName = event[1]['description']
202+
#testCaseName = event[1]['description']
203+
testCaseName = event[1]
203204
i = testCaseName.find('#')
204205
j = testCaseName.find('(')
205206
testCaseName = testCaseName[i+1:j]

src/java/org/apache/lucene/server/FromFileTermFreqIterator.java

+19-17
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class FromFileTermFreqIterator implements InputIterator, Closeable {
3535
private final BufferedReader reader;
3636
private long weight;
3737
private int lineCount;
38+
final boolean hasContexts;
3839

3940
/** How many suggestions were found. */
4041
public int suggestCount;
@@ -43,13 +44,14 @@ public class FromFileTermFreqIterator implements InputIterator, Closeable {
4344
private final Set<BytesRef> contexts = new HashSet<>();
4445

4546
/** Sole constructor. */
46-
public FromFileTermFreqIterator(File sourceFile) throws IOException {
47+
public FromFileTermFreqIterator(File sourceFile, boolean hasContexts) throws IOException {
4748
reader = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile), "UTF-8"), 65536);
49+
this.hasContexts = hasContexts;
4850
}
4951

5052
@Override
5153
public boolean hasContexts() {
52-
return true;
54+
return hasContexts;
5355
}
5456

5557
@Override
@@ -93,25 +95,25 @@ public BytesRef next() {
9395

9496
int spot3 = line.indexOf('\u001f', spot2+1);
9597
if (spot3 == -1) {
96-
throw new RuntimeException("line " + lineCount + " is malformed");
97-
}
98-
99-
extra = new BytesRef(line.substring(spot2+1, spot3));
98+
extra = new BytesRef(line.substring(spot2+1));
99+
} else {
100+
extra = new BytesRef(line.substring(spot2+1, spot3));
100101

101-
contexts.clear();
102+
contexts.clear();
102103

103-
int upto = spot3+1;
104-
while (true ){
105-
int nextUpto = line.indexOf('\u001f', upto);
106-
if (nextUpto == -1) {
107-
contexts.add(new BytesRef(line.substring(upto)));
108-
break;
109-
} else {
110-
contexts.add(new BytesRef(line.substring(upto, nextUpto)));
111-
upto = nextUpto+1;
104+
int upto = spot3+1;
105+
while (true) {
106+
int nextUpto = line.indexOf('\u001f', upto);
107+
if (nextUpto == -1) {
108+
contexts.add(new BytesRef(line.substring(upto)));
109+
break;
110+
} else {
111+
contexts.add(new BytesRef(line.substring(upto, nextUpto)));
112+
upto = nextUpto+1;
113+
}
112114
}
115+
//System.out.println("CONTEXTS: " + text.utf8ToString() + " -> " + contexts);
113116
}
114-
//System.out.println("CONTEXTS: " + text.utf8ToString() + " -> " + contexts);
115117

116118
return text;
117119
}

src/java/org/apache/lucene/server/IndexState.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
9393
import org.apache.lucene.server.handlers.BuildSuggestHandler;
9494
import org.apache.lucene.server.handlers.LiveSettingsHandler;
95-
import org.apache.lucene.server.handlers.RegisterFieldHandler;
95+
import org.apache.lucene.server.handlers.RegisterFieldsHandler;
9696
import org.apache.lucene.server.handlers.SettingsHandler;
9797
import org.apache.lucene.server.params.BooleanType;
9898
import org.apache.lucene.server.params.FloatType;
@@ -798,8 +798,8 @@ public synchronized void load(JSONObject o) throws IOException {
798798
JSONObject fieldsState = (JSONObject) o.get("fields");
799799
JSONObject top = new JSONObject();
800800
top.put("fields", fieldsState);
801-
Request r = new Request(null, null, top, RegisterFieldHandler.TYPE);
802-
FinishRequest fr = ((RegisterFieldHandler) globalState.getHandler("registerFields")).handle(this, r, null);
801+
Request r = new Request(null, null, top, RegisterFieldsHandler.TYPE);
802+
FinishRequest fr = ((RegisterFieldsHandler) globalState.getHandler("registerFields")).handle(this, r, null);
803803
assert !Request.anythingLeft(top): top;
804804
fr.finish();
805805

src/java/org/apache/lucene/server/Server.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
import org.apache.lucene.server.handlers.NewNRTPointHandler;
8383
import org.apache.lucene.server.handlers.NodeToNodeHandler;
8484
import org.apache.lucene.server.handlers.RefreshHandler;
85-
import org.apache.lucene.server.handlers.RegisterFieldHandler;
85+
import org.apache.lucene.server.handlers.RegisterFieldsHandler;
8686
import org.apache.lucene.server.handlers.ReleaseSnapshotHandler;
8787
import org.apache.lucene.server.handlers.RollbackHandler;
8888
import org.apache.lucene.server.handlers.Search2Handler;
@@ -662,7 +662,7 @@ public Server(String nodeName, Path globalStateDir, int backlog, int threadCount
662662
globalState.addHandler("indexStatus", new IndexStatusHandler(globalState));
663663
globalState.addHandler("linkNode", new LinkNodeHandler(globalState));
664664
globalState.addHandler("liveSettings", new LiveSettingsHandler(globalState));
665-
globalState.addHandler("registerFields", new RegisterFieldHandler(globalState));
665+
globalState.addHandler("registerFields", new RegisterFieldsHandler(globalState));
666666
globalState.addHandler("releaseSnapshot", new ReleaseSnapshotHandler(globalState));
667667
globalState.addHandler("search", new SearchHandler(globalState));
668668
globalState.addHandler("search2", new Search2Handler(globalState));

src/java/org/apache/lucene/server/handlers/AnalysisHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class AnalysisHandler extends Handler {
4242
private final static StructType TYPE = new StructType(
4343
new Param("indexName", "Index Name", new StringType()),
4444
new Param("text", "Text to analyze", new StringType()),
45-
new Param("analyzer", "Analyzer", RegisterFieldHandler.ANALYZER_TYPE));
45+
new Param("analyzer", "Analyzer", RegisterFieldsHandler.ANALYZER_TYPE));
4646

4747
/** Sole constructor. */
4848
public AnalysisHandler(GlobalState state) {
@@ -64,7 +64,7 @@ public FinishRequest handle(final IndexState state, final Request r, Map<String,
6464
final String text = r.getString("text");
6565

6666
// TODO: allow passing field name in, and we use its analyzer?
67-
final Analyzer a = RegisterFieldHandler.getAnalyzer(state, r, "analyzer");
67+
final Analyzer a = RegisterFieldsHandler.getAnalyzer(state, r, "analyzer");
6868

6969
return new FinishRequest() {
7070
@Override

src/java/org/apache/lucene/server/handlers/BuildSuggestHandler.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
import net.minidev.json.JSONValue;
6464
import net.minidev.json.parser.ParseException;
6565

66-
import static org.apache.lucene.server.handlers.RegisterFieldHandler.ANALYZER_TYPE;
66+
import static org.apache.lucene.server.handlers.RegisterFieldsHandler.ANALYZER_TYPE;
6767

6868
/** Handles {@code buildSuggest}. */
6969
public class BuildSuggestHandler extends Handler {
@@ -103,6 +103,7 @@ public class BuildSuggestHandler extends Handler {
103103
new Param("source", "Where to get suggestions from",
104104
new StructType(
105105
new Param("localFile", "Local file (to the server) to read suggestions + weights from; format is weight U+001F suggestion U+001F payload, one per line, with suggestion UTF-8 encoded. If this option is used then searcher, suggestField, weightField/Expression, payloadField should not be specified.", new StringType()),
106+
new Param("hasContexts", "True if this file provides per-suggestion contexts.", new BooleanType(), true),
106107
new Param("searcher", "Specific searcher version to use for pull suggestions to build. There are three different ways to specify a searcher version.",
107108
SearchHandler.SEARCHER_VERSION_TYPE),
108109
new Param("suggestField", "Field (from stored documents) containing the suggestion text", new StringType()),
@@ -142,6 +143,7 @@ public void load(IndexState indexState, JSONObject saveState) throws IOException
142143
Request source = r.getStruct("source");
143144
if (source.hasParam("localFile")) {
144145
source.getString("localFile");
146+
source.getBoolean("hasContexts");
145147
} else {
146148
Request searcher = source.getStruct("searcher");
147149
if (searcher.hasParam("indexGen")) {
@@ -198,10 +200,10 @@ private Lookup getSuggester(IndexState indexState, String suggestName, Request r
198200
// nocommit allow passing a field name, and we use that
199201
// field name's analyzer?
200202
if (r.hasParam("analyzer")) {
201-
indexAnalyzer = queryAnalyzer = RegisterFieldHandler.getAnalyzer(indexState, r, "analyzer");
203+
indexAnalyzer = queryAnalyzer = RegisterFieldsHandler.getAnalyzer(indexState, r, "analyzer");
202204
} else {
203-
indexAnalyzer = RegisterFieldHandler.getAnalyzer(indexState, r, "indexAnalyzer");
204-
queryAnalyzer = RegisterFieldHandler.getAnalyzer(indexState, r, "queryAnalyzer");
205+
indexAnalyzer = RegisterFieldsHandler.getAnalyzer(indexState, r, "indexAnalyzer");
206+
queryAnalyzer = RegisterFieldsHandler.getAnalyzer(indexState, r, "queryAnalyzer");
205207
}
206208
if (indexAnalyzer == null) {
207209
r.fail("analyzer", "analyzer or indexAnalyzer must be specified");
@@ -420,10 +422,11 @@ public FinishRequest handle(final IndexState indexState, final Request r, Map<St
420422
if (!localFile.canRead()) {
421423
r.fail("localFile", "cannot read file");
422424
}
425+
boolean hasContexts = source.getBoolean("hasContexts");
423426
searcher = null;
424427
// Pull suggestions from local file:
425428
try {
426-
iterator = new FromFileTermFreqIterator(localFile);
429+
iterator = new FromFileTermFreqIterator(localFile, hasContexts);
427430
} catch (IOException ioe) {
428431
r.fail("localFile", "cannot open file", ioe);
429432
}

src/java/org/apache/lucene/server/handlers/RegisterFieldHandler.java src/java/org/apache/lucene/server/handlers/RegisterFieldsHandler.java

+25-15
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,8 @@
106106
import net.minidev.json.JSONObject;
107107
import net.minidev.json.JSONValue;
108108

109-
// nocommit rename to RegisterFieldsHandler:
110-
111109
/** Handles {@code registerFields}. */
112-
public class RegisterFieldHandler extends Handler {
110+
public class RegisterFieldsHandler extends Handler {
113111

114112
private final static List<Object> DEFAULT_ENGLISH_STOP_WORDS = new ArrayList<Object>();
115113
static {
@@ -347,7 +345,7 @@ public class RegisterFieldHandler extends Handler {
347345
new StructType(new Param("*", "Register this field name with the provided type. Note that the field name must be of the form [a-zA-Z_][a-zA-Z_0-9]*. You can register multiple fields in one request.", FIELD_TYPE))));
348346

349347
/** Sole constructor. */
350-
public RegisterFieldHandler(GlobalState state) {
348+
public RegisterFieldsHandler(GlobalState state) {
351349
super(state);
352350
}
353351

@@ -450,11 +448,9 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
450448
boolean sorted = f.getBoolean("sort");
451449
boolean grouped = f.getBoolean("group");
452450

453-
boolean stored;
451+
Boolean stored = null;
454452
if (f.hasParam("store")) {
455453
stored = f.getBoolean("store");
456-
} else {
457-
stored = false;
458454
}
459455

460456
// TODO: current we only highlight using
@@ -481,6 +477,13 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
481477
}
482478
}
483479

480+
// if stored was unspecified and we are highlighting, turn it on:
481+
if (highlighted) {
482+
if (stored == null) {
483+
stored = true;
484+
}
485+
}
486+
484487
String dateTimeFormat = null;
485488

486489
// System.out.println("NAME: " + name + " type: " + type + " hightlight: " + highlighted);
@@ -498,7 +501,9 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
498501
ft.setDocValuesType(DocValuesType.BINARY);
499502
}
500503
if (highlighted) {
501-
stored = true;
504+
if (stored == false) {
505+
f.fail("store", "store=false is not allowed when highlight=true");
506+
}
502507
ft.setStored(true);
503508
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
504509
} else {
@@ -510,7 +515,16 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
510515
if (f.hasParam("analyzer")) {
511516
f.fail("analyzer", "no analyzer allowed with atom (it's hardwired to KeywordAnalyzer internally)");
512517
}
513-
ft.setIndexOptions(IndexOptions.DOCS);
518+
if (highlighted) {
519+
if (stored == false) {
520+
f.fail("store", "store=false is not allowed when highlight=true");
521+
}
522+
// nocommit need test highlighting atom fields
523+
ft.setStored(true);
524+
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
525+
} else {
526+
ft.setIndexOptions(IndexOptions.DOCS);
527+
}
514528
ft.setOmitNorms(true);
515529
ft.setTokenized(false);
516530
if (sorted || grouped) {
@@ -575,7 +589,7 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
575589
break;
576590

577591
case LAT_LON:
578-
if (stored) {
592+
if (stored == Boolean.TRUE) {
579593
f.fail("stored", "latlon fields cannot be stored");
580594
}
581595
ft.setDimensions(2, Integer.BYTES);
@@ -613,14 +627,10 @@ private FieldDef parseOneFieldType(Request r, IndexState state, Map<String,Field
613627
throw new AssertionError("unhandled type \"" + type + "\"");
614628
}
615629

616-
// System.out.println("REGISTER: " + name + " ft=" + ft);
617-
618630
// nocommit InetAddressPoint, BiggishInteger
619631

620-
if (stored) {
632+
if (stored == Boolean.TRUE) {
621633
ft.setStored(true);
622-
} else if (highlighted) {
623-
f.fail("store", "store=false is not allowed when highlight=true");
624634
}
625635

626636
boolean usePoints = false;

src/java/org/apache/lucene/server/handlers/UpdateSuggestHandler.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@
2929
import org.apache.lucene.server.FromFileTermFreqIterator;
3030
import org.apache.lucene.server.GlobalState;
3131
import org.apache.lucene.server.IndexState;
32+
import org.apache.lucene.server.params.BooleanType;
3233
import org.apache.lucene.server.params.Param;
3334
import org.apache.lucene.server.params.Request;
3435
import org.apache.lucene.server.params.StringType;
3536
import org.apache.lucene.server.params.StructType;
3637
import org.apache.lucene.util.BytesRef;
38+
3739
import net.minidev.json.JSONObject;
3840

3941
/** Handles {@code updateSuggest}. */
@@ -47,7 +49,8 @@ public class UpdateSuggestHandler extends Handler {
4749
// nocommit also allow pulling from index/expressions, like BuildSuggest:
4850
new Param("source", "Where to get suggestions from",
4951
new StructType(
50-
new Param("localFile", "Local file (to the server) to read suggestions + weights from; format is weight U+001F suggestion U+001F payload, one per line, with suggestion UTF-8 encoded. If this option is used then searcher, suggestField, weightField/Expression, payloadField should not be specified.", new StringType()))));
52+
new Param("localFile", "Local file (to the server) to read suggestions + weights from; format is weight U+001F suggestion U+001F payload, one per line, with suggestion UTF-8 encoded. If this option is used then searcher, suggestField, weightField/Expression, payloadField should not be specified.", new StringType()),
53+
new Param("hasContexts", "True if this suggester file provides contexts", new BooleanType(), true))));
5154

5255
/** Sole constructor. */
5356
public UpdateSuggestHandler(GlobalState state) {
@@ -80,13 +83,14 @@ public FinishRequest handle(final IndexState state, final Request r, Map<String,
8083

8184
Request r2 = r.getStruct("source");
8285
final File localFile = new File(r2.getString("localFile"));
86+
final boolean hasContexts = r2.getBoolean("hasContexts");
8387

8488
return new FinishRequest() {
8589

8690
@Override
8791
public String finish() throws IOException {
8892

89-
InputIterator iterator = new FromFileTermFreqIterator(localFile);
93+
InputIterator iterator = new FromFileTermFreqIterator(localFile, hasContexts);
9094
boolean hasPayloads = iterator.hasPayloads();
9195
int count = 0;
9296
while (true) {

src/test/org/apache/lucene/server/TestSuggest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void testAnalyzingSuggest() throws Exception {
6161
out.write("5\u001fthe time is now\u001ffoobar\n");
6262
out.close();
6363

64-
JSONObject result = send("buildSuggest", "{source: {localFile: '" + tempFile.toAbsolutePath() + "'}, class: 'AnalyzingSuggester', suggestName: 'suggest', indexAnalyzer: EnglishAnalyzer, queryAnalyzer: {tokenizer: Standard, tokenFilters: [EnglishPossessive, LowerCase, PorterStem]]}}");
64+
JSONObject result = send("buildSuggest", "{source: {localFile: '" + tempFile.toAbsolutePath() + "', hasContexts: false}, class: 'AnalyzingSuggester', suggestName: 'suggest', indexAnalyzer: EnglishAnalyzer, queryAnalyzer: {tokenizer: Standard, tokenFilters: [EnglishPossessive, LowerCase, PorterStem]]}}");
6565
assertEquals(5, result.get("count"));
6666
//commit();
6767

@@ -203,7 +203,7 @@ public void testFuzzySuggest() throws Exception {
203203
out.write("15\u001flove lost\u001ffoobar\n");
204204
out.close();
205205

206-
JSONObject result = send("buildSuggest", "{source: {localFile: '" + tempFile.toAbsolutePath() + "'}, class: 'FuzzySuggester', suggestName: 'suggest3', analyzer: {tokenizer: Whitespace, tokenFilters: [LowerCase]}}");
206+
JSONObject result = send("buildSuggest", "{source: {localFile: '" + tempFile.toAbsolutePath() + "', hasContexts: false}, class: 'FuzzySuggester', suggestName: 'suggest3', analyzer: {tokenizer: Whitespace, tokenFilters: [LowerCase]}}");
207207
assertEquals(1, result.get("count"));
208208
//commit();
209209

0 commit comments

Comments
 (0)