Apache Lucene в Java: лучший подход для таблицы полей RSS - PullRequest
0 голосов
/ 24 апреля 2019

Я создаю сборщик RSS-каналов, в котором все новости из каждого URL-адреса канала хранятся в виде документа индекса Lucene.

Если я получу http-код ответа 304 (не изменен), или дата канала соответствуеткэшировал один, тогда я ничего не делаю, если нет (канал изменяется с момента последнего запроса), я должен был бы удалить все документы с полем feed_url, установленным на URL моего канала.

Так вот что ясделать для каждого обновленного фида

for (Feed feed : updatedFeeds) {
    writer.deleteDocuments(new Term("feed_url", feed.getUrl()));
    for (News news : feed) {
        Document document = new Document();
        document.add(new StringField("feed_url", feed.getUrl(), org.apache.lucene.document.Field.Store.NO));
        document.add(new StringField("url", news.getUrl(), org.apache.lucene.document.Field.Store.NO));
        document.add(new TextField("tags", news.getTagsAndTokenizableText(), org.apache.lucene.document.Field.Store.NO));
        document.add(new StoredField("news", news.serialize()));
        writer.updateDocument(new Term("url", news.getUrl()), 
document);
    }
}

Сценарий наихудшего случая: каждый фид обновляется с момента последнего http-запроса, поэтому каждая запись в индексе Lucene удаляется.

Наилучшим подходом будетудалить только те новости, которых нет в ленте, но которые есть в индексе Lucene, затем добавить новости, которые есть в ленте, но отсутствуют в индексе Lucene, но я не нашел способа сделать это с помощью Apache Lucene

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...