Инкрементное индексирование для семантического поиска

Интересно, есть ли какие-то стандарты или передовые методы выполнения инкрементной индексации тройного хранилища для целей семантического поиска.

Действительно, для поддержки семантического поиска обычно используют solr или elasticsearch, где ресурсы индексируются в соответствии с каким-то конкретным запросом SPARQL. Хотя можно переиндексировать весь набор ресурсов, например, раз в день, это нежелательно. Отсюда возникает необходимость выполнять его постепенно. Однако для этого нужно каким-то образом отслеживать изменения, чтобы конечный козел мог продолжать индексировать или удалять только то, что изменилось.

Например, чтобы индексировать только то, что изменилось, запрос SPARQL должен каким-то образом включать какой-то фильтр меток времени.

Если у кого-то есть какие-то предложения или опыт по его выполнению, то он хотел бы поделиться этим, это будет хорошо оценено.

Пока меня несколько вдохновляет подключаемый модуль EEA ElasticSearch RDF River. Я также смотрю на онтологию Changeset Ontology.


person MaatDeamon    schedule 23.03.2016    source источник


Ответы (1)


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

Но не отказывайтесь от выполнения полного переиндексации по периодическому графику, например, по ночам. Если только вы не требуете, чтобы полнотекстовый поиск всегда проводился по самым последним данным, и ваши данные менялись быстро, полное повторное индексирование на регулярной основе будет работать нормально. .

person Michael    schedule 25.03.2016
comment
Что вы имеете в виду под «Самым простым способом добиться этого» - это вовлечь что-то в жизненный цикл транзакции. Затем вы сможете увидеть изменения в базе данных, которые предоставят вам график, который необходимо проиндексировать. - person MaatDeamon; 25.03.2016
comment
В общем, идея заключалась бы в том, чтобы использовать онтологию, такую ​​как набор изменений, и записывать каждое изменение? Каждый раз, когда я выполняю операцию в своей базе данных, мне нужно добавить соответствующую операцию changeSet? Это верно ? - person MaatDeamon; 25.03.2016
comment
Вы рассматривали возможность использования базы данных с полнотекстовым индексированием? - person Michael; 26.03.2016
comment
Да, но тогда у меня не будет всех плюсов ElasticSearch или Solr, например. Подсветка подсказок и так далее ... Кроме того, я думаю / верю, что гораздо лучше контролировать именно то, что вы хотите проиндексировать. Обычно эти базы данных просто индексируют все литералы. Вам все равно нужно выполнить запрос sparql, чтобы получить то, что вы хотите. Я предполагаю, что это немного медленнее, чем выполнение вашего запроса в solr. - person MaatDeamon; 28.03.2016
comment
Я думал о Stardog, который я использую. Я думаю, что у Graph DB для этого есть что-то намного лучше, у них есть соединитель для Solr или ElasticSearch, и они обрабатывают синхронизацию, о которой я говорю. Но это глубокая интеграция с существующей системой. Я хотел бы воспроизвести это, но со стороны. - person MaatDeamon; 28.03.2016
comment
Если вы собираетесь воспроизвести эту функциональность извне, я предлагаю вам попробовать то, что я сказал; войти в жизненный цикл транзакции и использовать набор изменений для транзакции как полезную нагрузку того, что необходимо инкрементно индексировать. Если вы не можете расширить базу данных, было бы довольно легко добиться этого извне с помощью декоратора вокруг соединения. - person Michael; 28.03.2016
comment
Спасибо за ваше понимание. Думаю, я в целом понимаю, что вы имеете в виду. Хотя я считаю, что вы на шаг впереди меня, когда дело касается деталей db. Я понятия не имею, как выглядит API для жизненного цикла транзакции. Никогда не заходил так глубоко в db. Я не думаю, что на самом деле звездная собака позволила бы это сделать. Это вообще не открытый исходный код. - person MaatDeamon; 28.03.2016
comment
Я исследую, как это сделать с помощью декоратора. Чтобы убедиться, что мы согласованы с декоратором, мне придется предоставить набор изменений сам? Я не думаю, что создание набора изменений в целом так легко реализовать, поэтому его нужно в некоторой степени предоставлять каждый раз, когда выполняется обновление? - person MaatDeamon; 28.03.2016
comment
нет, пользователь собирается предоставить набор изменений через соединение с базой данных; это то, что вы бы украсили. Затем у вас будет набор графиков RDF, которые нужно добавить и / или удалить из базы данных, что даст вам основу для информации, которую необходимо инкрементально проиндексировать. - person Michael; 29.03.2016
comment
@MaatDeamon Я только наполовину прочитал ваши требования и это обсуждение, но, возможно, стоит взглянуть на Sesame LuceneSail, который позволяет интегрироваться с Lucene, Solr или ElasticSearch и поддерживает как встроенную индексацию, так и подключение к удаленному сервер индексации. - person Jeen Broekstra; 05.04.2016