diff --git a/source/net/yacy/search/index/Fulltext.java b/source/net/yacy/search/index/Fulltext.java index f26bc9b60..0d32b2359 100644 --- a/source/net/yacy/search/index/Fulltext.java +++ b/source/net/yacy/search/index/Fulltext.java @@ -41,6 +41,7 @@ import net.yacy.cora.services.federated.solr.SolrConnector; import net.yacy.cora.sorting.ConcurrentScoreMap; import net.yacy.cora.sorting.ScoreMap; import net.yacy.cora.storage.HandleSet; +import net.yacy.cora.util.SpaceExceededException; import net.yacy.document.parser.html.CharacterCoding; import net.yacy.kelondro.data.meta.DigestURI; import net.yacy.kelondro.data.meta.URIMetadata; @@ -263,14 +264,31 @@ public final class Fulltext implements Iterable { } public void putMetadata(final URIMetadata entry) throws IOException { - if (!this.connectedSolr()) return; - try { - SolrDocument sd = getSolr().get(ASCII.String(entry.url().hash())); - if (sd == null || !entry.isOlder(new URIMetadataNode(sd))) { - getSolr().add(getSolrScheme().metadata2solr(entry)); - } - } catch (SolrException e) { - throw new IOException(e.getMessage(), e); + if (this.connectedSolr()) { + try { + SolrDocument sd = getSolr().get(ASCII.String(entry.url().hash())); + if (sd == null || !entry.isOlder(new URIMetadataNode(sd))) { + getSolr().add(getSolrScheme().metadata2solr(entry)); + } + } catch (SolrException e) { + throw new IOException(e.getMessage(), e); + } + } else if (this.urlIndexFile != null && entry instanceof URIMetadataRow) { + URIMetadata oldEntry = null; + try { + final Row.Entry oe = this.urlIndexFile.get(entry.hash(), false); + oldEntry = (oe == null) ? null : new URIMetadataRow(oe, null, 0); + } catch (final Throwable e) { + Log.logException(e); + oldEntry = null; + } + if (oldEntry == null || !entry.isOlder(oldEntry)) { + try { + this.urlIndexFile.put(((URIMetadataRow) entry).toRowEntry()); + } catch (final SpaceExceededException e) { + throw new IOException("RowSpaceExceededException in " + this.urlIndexFile.filename() + ": " + e.getMessage()); + } + } } this.statsDump = null; if (MemoryControl.shortStatus()) clearCache();