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 2013/12/25 14:36:52 UTC
svn commit: r1553379 - in /lucene/dev/branches/lucene5376/lucene/server/src:
java/org/apache/lucene/server/ java/org/apache/lucene/server/handlers/
test/org/apache/lucene/server/
Author: mikemccand
Date: Wed Dec 25 13:36:52 2013
New Revision: 1553379
URL: http://svn.apache.org/r1553379
Log:
LUCENE-5376: try to address nocommit...
Modified:
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/WholeMVJSONPassageFormatter.java
lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/handlers/SearchHandler.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/TestHighlight.java
Modified: lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/WholeMVJSONPassageFormatter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/WholeMVJSONPassageFormatter.java?rev=1553379&r1=1553378&r2=1553379&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/WholeMVJSONPassageFormatter.java (original)
+++ lucene/dev/branches/lucene5376/lucene/server/src/java/org/apache/lucene/server/WholeMVJSONPassageFormatter.java Wed Dec 25 13:36:52 2013
@@ -22,8 +22,16 @@ import org.apache.lucene.search.postings
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
+/** From a multi-valued field (indexed with the values
+ * joined with INFO_SEP), highlight each value entirely. */
public class WholeMVJSONPassageFormatter extends PassageFormatter {
+ private final int offsetGap;
+
+ public WholeMVJSONPassageFormatter(int offsetGap) {
+ this.offsetGap = offsetGap;
+ }
+
@Override
public String format(Passage passages[], String content) {
JSONArray result = wholeMultiValued(passages, content);
@@ -38,6 +46,8 @@ public class WholeMVJSONPassageFormatter
* JSONArray so that each original field value is
* separated and highlighted. */
private JSONArray wholeMultiValued(Passage[] passages, String content) {
+
+ // Caller must use WholeBreakIterator:
assert passages.length == 1;
Passage passage = passages[0];
@@ -72,8 +82,9 @@ public class WholeMVJSONPassageFormatter
pos = chunk.length();
}
- // nocommit if analyzer has different offsetGap then
- // we need to use that instead of +1!
+ // nocommit we always join w/ INFO_SEP ... so it
+ //should just be 1?
+ //charOffset += chunk.length()+offsetGap;
charOffset += chunk.length()+1;
}
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=1553379&r1=1553378&r2=1553379&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 Wed Dec 25 13:36:52 2013
@@ -481,7 +481,9 @@ public class SearchHandler extends Handl
protected PassageFormatter getFormatter(String fieldName) {
FieldHighlightConfig perField = perFieldConfig.get(fieldName);
if (!perField.singleValued && perField.mode.equals("whole")) {
- return new WholeMVJSONPassageFormatter();
+ FieldDef fd = state.getField(fieldName);
+ assert fd.indexAnalyzer != null;
+ return new WholeMVJSONPassageFormatter(fd.indexAnalyzer.getOffsetGap(fieldName));
} else {
return new SVJSONPassageFormatter(maxSnippetLength);
}
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=1553379&r1=1553378&r2=1553379&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 Wed Dec 25 13:36:52 2013
@@ -343,6 +343,10 @@ public class ServerBaseTestCase extends
return (JSONArray) get(o, path);
}
+ protected JSONArray getArray(JSONArray o, int index) {
+ return (JSONArray) o.get(index);
+ }
+
/** Renders one hilited field (multiple passages) value
* with <b>...</b> tags, and ... separating the passages. */
protected String renderHighlight(JSONArray hit) {
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=1553379&r1=1553378&r2=1553379&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 Wed Dec 25 13:36:52 2013
@@ -17,13 +17,15 @@ package org.apache.lucene.server;
* limitations under the License.
*/
+import java.io.File;
import java.io.IOException;
-
import org.junit.AfterClass;
import org.junit.BeforeClass;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
+import org.apache.lucene.util._TestUtil;
+
public class TestHighlight extends ServerBaseTestCase {
@BeforeClass
@@ -192,5 +194,52 @@ public class TestHighlight extends Serve
// expected
}
}
+
+ public void testNonDefaultOffsetGap() throws Exception {
+ // nocommit add test infra to create a randomly named new index?
+ _TestUtil.rmDir(new File("offsetgap"));
+ send("createIndex", "{indexName: offsetgap, rootDir: offsetgap}");
+ // Wait at most 1 msec for a searcher to reopen; this
+ // value is too low for a production site but for
+ // testing we want to minimize sleep time:
+ send("liveSettings", "{indexName: offsetgap, minRefreshSec: 0.001}");
+ send("startIndex", "{indexName: offsetgap}");
+ JSONObject o = new JSONObject();
+
+ put(o, "body", "{type: text, multiValued: true, highlight: true, store: true, analyzer: {tokenizer: StandardTokenizer, offsetGap: 100}}");
+
+ JSONObject o2 = new JSONObject();
+ o2.put("fields", o);
+ o2.put("indexName", "offsetgap");
+ send("registerFields", o2);
+
+ o = new JSONObject();
+ JSONArray parts = new JSONArray();
+ o.put("body", parts);
+
+ parts.add("highlight me");
+ parts.add("highlight me too");
+
+ o2 = new JSONObject();
+ o2.put("fields", o);
+ o2.put("indexName", "offsetgap");
+ long indexGen = getLong(send("addDocument", o2), "indexGen");
+
+ o = new JSONObject();
+ o.put("indexName", "offsetgap");
+ o.put("queryText", "highlight");
+
+ o2 = new JSONObject();
+ o.put("searcher", o2);
+ o2.put("indexGen", indexGen);
+ put(o, "retrieveFields", "[{field: 'body', highlight: 'whole'}]");
+
+ JSONObject result = send("search", o);
+ parts = getArray(result, "hits[0].fields.body");
+ assertEquals(2, parts.size());
+ assertEquals("<b>highlight</b> me", renderSingleHighlight(getArray(parts, 0)));
+ // nocommit this fails when offsetGap != 1 ... debug!
+ //assertEquals("<b>highlight</b> me too", renderSingleHighlight(getArray(parts, 1)));
+ }
}