[
https://issues.apache.org/jira/browse/SOLR-1880?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shalin Shekhar Mangar updated SOLR-1880:
----------------------------------------
Attachment: SOLR-1880.patch
There was some code duplication in QueryComponent.returnFields:
{code}
for (ShardResponse srsp : sreq.responses) {
SolrDocumentList docs = (SolrDocumentList)
srsp.getSolrResponse().getResponse().get("response");
for (SolrDocument doc : docs) {
Object id = doc.getFieldValue(keyFieldName);
ShardDoc sdoc = rb.resultIds.get(id.toString());
if (sdoc != null) {
if (returnScores && sdoc.score != null) {
doc.setField("score", sdoc.score);
}
rb._responseDocs.set(sdoc.positionInResponse, doc);
}
if (sdoc != null) {
if (returnScores && sdoc.score != null) {
doc.setField("score", sdoc.score);
}
if (removeKeyField) {
doc.removeFields(keyFieldName);
}
rb._responseDocs.set(sdoc.positionInResponse, doc);
}
}
}
{code}
I changed that to:
{code}
for (ShardResponse srsp : sreq.responses) {
SolrDocumentList docs = (SolrDocumentList)
srsp.getSolrResponse().getResponse().get("response");
for (SolrDocument doc : docs) {
Object id = doc.getFieldValue(keyFieldName);
ShardDoc sdoc = rb.resultIds.get(id.toString());
if (sdoc != null) {
if (returnScores && sdoc.score != null) {
doc.setField("score", sdoc.score);
}
if (removeKeyField) {
doc.removeFields(keyFieldName);
}
rb._responseDocs.set(sdoc.positionInResponse, doc);
}
}
}
{code}
I also removed the comment about fl=id,score,sortField in the
DistributedQueryComponentOptimizationTest
This is ready to go.
> Performance: Distributed Search should skip GET_FIELDS stage if EXECUTE_QUERY
> stage gets all fields
> ---------------------------------------------------------------------------------------------------
>
> Key: SOLR-1880
> URL: https://issues.apache.org/jira/browse/SOLR-1880
> Project: Solr
> Issue Type: Improvement
> Components: search
> Affects Versions: 1.4
> Reporter: Shawn Smith
> Assignee: Shalin Shekhar Mangar
> Attachments: ASF.LICENSE.NOT.GRANTED--one-pass-query-v1.4.0.patch,
> ASF.LICENSE.NOT.GRANTED--one-pass-query.patch, SOLR-1880.patch,
> SOLR-1880.patch
>
>
> Right now, a typical distributed search using QueryComponent makes two HTTP
> requests to each shard:
> # STAGE_EXECUTE_QUERY executes one HTTP request to each shard to get top N
> ids and sort keys, merges the results to produce a final list of document IDs
> (PURPOSE_GET_TOP_IDS).
> # STAGE_GET_FIELDS executes a second HTTP request to each shard to get the
> document field values for the final list of document IDs (PURPOSE_GET_FIELDS).
> If the "fl" param is just "id" or just "id,score", all document data to
> return is already fetched by STAGE_EXECUTE_QUERY. The second
> STAGE_GET_FIELDS query is completely unnecessary. Eliminating that 2nd HTTP
> request can make a big difference in overall performance.
> Also, the "fl" param only gets id, score and sort columns, it would probably
> be cheaper to fetch the final sort column data in STAGE_EXECUTE_QUERY which
> has to read the sort column data anyway, and skip STAGE_GET_FIELDS.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]