SOLR-6365 refactoring and cleanup

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1622384 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Noble Paul 2014-09-04 00:16:31 +00:00
parent f46b189256
commit 8306b8a464
5 changed files with 45 additions and 86 deletions

View File

@ -77,6 +77,12 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase {
public void load(SolrQueryRequest req, SolrQueryResponse rsp,
ContentStream stream, UpdateRequestProcessor processor) throws Exception {
ContentStreamLoader ldr = pathVsLoaders.get(req.getContext().get("path"));
if(ldr != null){
ldr.load(req,rsp,stream,processor);
return;
}
String type = req.getParams().get(UpdateParams.ASSUME_CONTENT_TYPE);
if(type == null) {
type = stream.getContentType();
@ -134,7 +140,7 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase {
invariants = params;
}
}
private Map<String ,ContentStreamLoader> pathVsLoaders = new HashMap<>();
protected Map<String,ContentStreamLoader> createDefaultLoaders(NamedList args) {
SolrParams p = null;
if(args!=null) {
@ -147,7 +153,11 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase {
registry.put("application/javabin", new JavabinLoader().init(p) );
registry.put("text/csv", registry.get("application/csv") );
registry.put("text/xml", registry.get("application/xml") );
registry.put("text/json", registry.get("application/json") );
registry.put("text/json", registry.get("application/json"));
pathVsLoaders.put(JSON_PATH,registry.get("application/json"));
pathVsLoaders.put(DOC_PATH,registry.get("application/json"));
pathVsLoaders.put(CSV_PATH,registry.get("application/csv"));
return registry;
}
@ -166,16 +176,18 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase {
public static void addImplicits(List<PluginInfo> implicits) {
implicits.add(getPluginInfo("/update",Collections.emptyMap()));
implicits.add(getPluginInfo("/update/json", singletonMap("update.contentType", "application/json")));
implicits.add(getPluginInfo("/update/csv", singletonMap("update.contentType", "application/csv")));
implicits.add(getPluginInfo("/update/json/docs", makeMap("update.contentType", "application/json", "json.command","false")));
implicits.add(getPluginInfo(JSON_PATH, singletonMap("update.contentType", "application/json")));
implicits.add(getPluginInfo(CSV_PATH, singletonMap("update.contentType", "application/csv")));
implicits.add(getPluginInfo(DOC_PATH, makeMap("update.contentType", "application/json", "json.command","false")));
}
static PluginInfo getPluginInfo(String name, Map defaults){
Map m = makeMap("name", name, "class", UpdateRequestHandler.class.getName());
return new PluginInfo("requestHandler", m, new NamedList<>( singletonMap("defaults", new NamedList(defaults))) ,null);
}
public static final String DOC_PATH = "/update/json/docs";
public static final String JSON_PATH = "/update/json";
public static final String CSV_PATH = "/update/csv";
}

View File

@ -113,14 +113,11 @@ public class JsonLoader extends ContentStreamLoader {
@SuppressWarnings("fallthrough")
void processUpdate() throws IOException
{
if("false".equals( req.getParams().get("json.command"))){
String path = (String) req.getContext().get("path");
if(UpdateRequestHandler.DOC_PATH.equals(path) || "false".equals( req.getParams().get("json.command"))){
String split = req.getParams().get("split");
if(split != null){
handleSplitMode(split);
} else {
handleStreamingSingleDocs();
}
String[] f = req.getParams().getParams("f");
handleSplitMode(split,f);
return;
}
int ev = parser.nextEvent();
@ -192,9 +189,9 @@ public class JsonLoader extends ContentStreamLoader {
}
}
private void handleSplitMode(String split) throws IOException {
String[] fields = req.getParams().getParams("f");
req.getCore().getLatestSchema().getDefaultSearchFieldName();
private void handleSplitMode(String split, String[] fields) throws IOException {
if(split == null) split = "/";
if(fields == null || fields.length ==0) fields = new String[]{"/*"};
final boolean echo = "true".equals( req.getParams().get("echo"));
JsonRecordReader jsonRecordReader = JsonRecordReader.getInst(split, Arrays.asList(fields));
jsonRecordReader.streamRecords(parser,new JsonRecordReader.Handler() {

View File

@ -1049,5 +1049,11 @@
<str name="paramkey">param value</str>
</similarity>
-->
<field name="_text" type="text_general" indexed="true" stored="false" multiValued="true"/>
<field name="_src" type="string" indexed="false" stored="true" multiValued="true"/>
<copyField source="*" dest="_text"/>
</schema>

View File

@ -858,7 +858,6 @@
<str name="echoParams">explicit</str>
<str name="wt">json</str>
<str name="indent">true</str>
<str name="df">text</str>
</lst>
</requestHandler>
@ -900,7 +899,6 @@
text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
</str>
<str name="df">text</str>
<str name="mm">100%</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
@ -971,58 +969,17 @@
<str>spellcheck</str>
</arr>
</requestHandler>
<paramSet path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">_text</str>
</lst>
</paramSet>
<!-- Update Request Handler.
http://wiki.apache.org/solr/UpdateXmlMessages
The canonical Request Handler for Modifying the Index through
commands specified using XML, JSON, CSV, or JAVABIN
Note: Since solr1.1 requestHandlers requires a valid content
type header if posted in the body. For example, curl now
requires: -H 'Content-type:text/xml; charset=utf-8'
To override the request content type and force a specific
Content-type, use the request parameter:
?update.contentType=text/csv
This handler will pick a response format to match the input
if the 'wt' parameter is not explicit
-->
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<!-- See below for information on defining
updateRequestProcessorChains that can be used by name
on each Update Request
-->
<paramSet path="/update/**">
<lst name="defaults">
<str name="update.chain">add-unknown-fields-to-the-schema</str>
</lst>
</requestHandler>
<requestHandler name="/update/json" class="solr.UpdateRequestHandler">
<!-- See below for information on defining
updateRequestProcessorChains that can be used by name
on each Update Request
-->
<lst name="defaults">
<str name="update.contentType">application/json</str>
<str name="update.chain">add-unknown-fields-to-the-schema</str>
</lst>
</requestHandler>
<requestHandler name="/update/json/docs" class="solr.UpdateRequestHandler">
<!-- See below for information on defining
updateRequestProcessorChains that can be used by name
on each Update Request
-->
<lst name="defaults">
<str name="update.contentType">application/json</str>
<str name="update.chain">add-unknown-fields-to-the-schema</str>
<bool name="json.command">false</bool>
</lst>
</requestHandler>
</paramSet>
<!-- Solr Cell Update Request Handler
@ -1335,7 +1292,6 @@
-->
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<!-- Solr will use suggestions from both the 'default' spellchecker
and from the 'wordbreak' spellchecker and combine them.
collations (re-written queries) can include a combination of
@ -1372,7 +1328,6 @@
-->
<requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<bool name="tv">true</bool>
</lst>
<arr name="last-components">
@ -1421,7 +1376,6 @@
<requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="df">text</str>
</lst>
<arr name="last-components">
<str>elevator</str>

View File

@ -826,7 +826,6 @@
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</lst>
<!-- In addition to defaults, "appends" params can be specified
to identify values which should be appended to the list of
@ -959,7 +958,6 @@
text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
</str>
<str name="df">text</str>
<str name="mm">100%</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
@ -1052,18 +1050,13 @@
This handler will pick a response format to match the input
if the 'wt' parameter is not explicit
-->
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<!-- See below for information on defining
updateRequestProcessorChains that can be used by name
on each Update Request
-->
<!--
<lst name="defaults">
<str name="update.chain">dedupe</str>
</lst>
-->
</requestHandler>
<!--<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>-->
<paramSet path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">text</str>
</lst>
</paramSet>
<!-- The following are implicitly added
<requestHandler name="/update/json" class="solr.UpdateRequestHandler">
<lst name="defaults">
@ -1403,7 +1396,6 @@
-->
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<!-- Solr will use suggestions from both the 'default' spellchecker
and from the 'wordbreak' spellchecker and combine them.
collations (re-written queries) can include a combination of
@ -1460,7 +1452,6 @@
-->
<requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<bool name="tv">true</bool>
</lst>
<arr name="last-components">
@ -1606,7 +1597,6 @@
<requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="df">text</str>
</lst>
<arr name="last-components">
<str>elevator</str>