mirror of
https://github.com/yacy/yacy_search_server.git
synced 2025-07-21 09:04:37 -04:00
Simplified a little bit the RSS OpenSearch Solr writer
This commit is contained in:
@ -69,14 +69,14 @@ import net.yacy.search.schema.CollectionSchema;
|
||||
public class OpensearchResponseWriter implements QueryResponseWriter, SolrjResponseWriter {
|
||||
|
||||
// define a list of simple YaCySchema -> RSS Token matchings
|
||||
private static final Map<String, String> field2tag = new HashMap<String, String>();
|
||||
private static final Map<String, String> field2tag = new HashMap<>();
|
||||
|
||||
// pre-select a set of YaCy schema fields for the solr searcher which should cause a better caching
|
||||
private static final CollectionSchema[] extrafields = new CollectionSchema[]{
|
||||
CollectionSchema.id, CollectionSchema.title, CollectionSchema.description_txt, CollectionSchema.text_t,
|
||||
CollectionSchema.h1_txt, CollectionSchema.h2_txt, CollectionSchema.h3_txt, CollectionSchema.h4_txt, CollectionSchema.h5_txt, CollectionSchema.h6_txt,
|
||||
};
|
||||
static final Set<String> SOLR_FIELDS = new HashSet<String>();
|
||||
static final Set<String> SOLR_FIELDS = new HashSet<>();
|
||||
static {
|
||||
field2tag.put(CollectionSchema.coordinate_p.getSolrFieldName() + "_0_coordinate", Geo.Lat.getURIref());
|
||||
field2tag.put(CollectionSchema.coordinate_p.getSolrFieldName() + "_1_coordinate", Geo.Long.getURIref());
|
||||
@ -147,8 +147,6 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
final ResHead resHead = new ResHead();
|
||||
resHead.rows = request.getOriginalParams().getLong("rows", -1);
|
||||
|
||||
final int responseCount;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
SimpleOrderedMap<Object> facetCounts = (SimpleOrderedMap<Object>) values.get("facet_counts");
|
||||
@SuppressWarnings("unchecked")
|
||||
@ -164,11 +162,10 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
resHead.offset = documents.offset(); // equal to 'start' Solr param
|
||||
resHead.numFound = documents.matches();
|
||||
|
||||
responseCount = documents.size();
|
||||
|
||||
writeHeader(writer, resHead);
|
||||
|
||||
writeDocs(writer, documents, request, responseCount, snippets);
|
||||
writeDocs(writer, documents, request, snippets);
|
||||
} else if(responseObj instanceof SolrDocumentList) {
|
||||
/*
|
||||
* The response object can be a SolrDocumentList when the response is partial,
|
||||
@ -179,11 +176,9 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
resHead.offset = documents.getStart(); // equal to 'start' Solr param
|
||||
resHead.numFound = documents.getNumFound();
|
||||
|
||||
responseCount = documents.size();
|
||||
|
||||
writeHeader(writer, resHead);
|
||||
|
||||
writeDocs(writer, documents, responseCount, snippets);
|
||||
writeDocs(writer, documents, snippets);
|
||||
} else {
|
||||
throw new IOException("Unable to process Solr response format");
|
||||
}
|
||||
@ -265,23 +260,20 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
/**
|
||||
* Append to the writer the OpenSearch RSS representation of Solr documents.
|
||||
*
|
||||
* @param writer an open output writer. Must not be null.
|
||||
* @param documents the documents to render. Must not be null.
|
||||
* @param responseCount the number of documents to process
|
||||
* @param snippets snippets Solr computed text snippets (highlighting).
|
||||
* @param writer an open output writer. Must not be null.
|
||||
* @param documents the documents to render. Must not be null.
|
||||
* @param snippets snippets Solr computed text snippets (highlighting).
|
||||
* @throws IOException when an unexpected error occurred while writing
|
||||
*/
|
||||
private void writeDocs(final Writer writer, final SolrDocumentList documents, final int responseCount,
|
||||
private void writeDocs(final Writer writer, final SolrDocumentList documents,
|
||||
final Map<String, LinkedHashSet<String>> snippets) throws IOException {
|
||||
// parse body
|
||||
String urlhash = null;
|
||||
MultiProtocolURL url = null;
|
||||
final Iterator<SolrDocument> iterator = documents.iterator();
|
||||
for (int i = 0; i < responseCount; i++) {
|
||||
for (SolrDocument doc: documents) {
|
||||
openTag(writer, "item");
|
||||
SolrDocument doc = iterator.next();
|
||||
List<String> texts = new ArrayList<String>();
|
||||
List<String> descriptions = new ArrayList<String>();
|
||||
List<String> texts = new ArrayList<>();
|
||||
List<String> descriptions = new ArrayList<>();
|
||||
String docTitle = "";
|
||||
List<Object> images_protocol_obj = new ArrayList<>();
|
||||
List<String> images_stub = new ArrayList<>();
|
||||
@ -407,30 +399,26 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
*
|
||||
* @param writer an open output writer. Must not be null.
|
||||
* @param documents the documents to render. Must not be null.
|
||||
* @param responseCount the number of documents to process
|
||||
* @param snippets Solr computed text snippets (highlighting).
|
||||
* @throws IOException when an unexpected error occurred while writing
|
||||
*/
|
||||
private void writeDocs(final Writer writer, final DocList documents, final SolrQueryRequest request, final int responseCount,
|
||||
private void writeDocs(final Writer writer, final DocList documents, final SolrQueryRequest request,
|
||||
final Map<String, LinkedHashSet<String>> snippets) throws IOException {
|
||||
// parse body
|
||||
SolrIndexSearcher searcher = request.getSearcher();
|
||||
String urlhash = null;
|
||||
MultiProtocolURL url = null;
|
||||
final DocIterator iterator = documents.iterator();
|
||||
for (int i = 0; i < responseCount; i++) {
|
||||
while(iterator.hasNext()) {
|
||||
openTag(writer, "item");
|
||||
int id = iterator.nextDoc();
|
||||
Document doc = searcher.doc(id, SOLR_FIELDS);
|
||||
List<IndexableField> fields = doc.getFields();
|
||||
int fieldc = fields.size();
|
||||
List<String> texts = new ArrayList<String>();
|
||||
List<String> descriptions = new ArrayList<String>();
|
||||
List<String> texts = new ArrayList<>();
|
||||
List<String> descriptions = new ArrayList<>();
|
||||
String docTitle = "";
|
||||
List<Object> images_protocol_obj = new ArrayList<>();
|
||||
List<String> images_stub = new ArrayList<>();
|
||||
for (int j = 0; j < fieldc; j++) {
|
||||
IndexableField value = fields.get(j);
|
||||
for (final IndexableField value : doc.getFields()) {
|
||||
String fieldName = value.name();
|
||||
|
||||
// apply generic matching rule
|
||||
@ -505,11 +493,11 @@ public class OpensearchResponseWriter implements QueryResponseWriter, SolrjRespo
|
||||
}
|
||||
|
||||
/**
|
||||
* Append the Solr document URL as a RSS link to the writer
|
||||
* @param writer
|
||||
* @param sku
|
||||
* @return a MultiProtocolURL instance or null
|
||||
* @throws IOException
|
||||
* Append information about the Solr document URL to the writer
|
||||
* @param writer an open output writer. Must no be null.
|
||||
* @param sku the Solr document URL as a String.
|
||||
* @return a MultiProtocolURL instance built from the URL string, or null when the URL string is malformed.
|
||||
* @throws IOException when an unexpected error occurred while writing
|
||||
*/
|
||||
private MultiProtocolURL writeLink(final Writer writer, final String sku)
|
||||
throws IOException {
|
||||
|
Reference in New Issue
Block a user