如何从virtuoso sparql端点导入和索引solr中的rdf数据

时间:2015-03-12 09:56:00

标签: solr rdf dataimporthandler virtuoso

我正在尝试使用jdbc驱动程序方法在solr中实现solr dataimport处理程序。

我的用例是 我在virtuoso中有RDF数据,我想使用dataimport处理程序(自动提交)在solr中索引这些数据

这是我的代码

solrconfig.xml中

<lib dir="${solr.install.dir:../../../..}/dist/" regex="virt_dialect-.*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="virtjdbc-.*\.jar" />

<requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
  </requestHandler>

DB-数据-config.xml中

<dataConfig>
    <dataSource driver="virtuoso.jdbc4.Driver" url="jdbc:virtuoso://localhost:1111/" user="dba" password "dba" />
    <document>
        <entity name="item" query="SELECT ?S, ?P, ?O FROM <http://localhost:8890/sparql> { ?S ?P ?O }"
                deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
            <field column="subject" name="item.S" />
            <field column="description" name="item.P" />
            <field column="title" name="item.O" />
        </entity>
    </document>
</dataConfig>

我也想尝试关注此链接 http://fatac.github.io/configuration.html 但由于这项技术的新功能,我无法正确实现这一点。 感谢

1 个答案:

答案 0 :(得分:0)

如果这仍与s / o相关

  1. &LT; &GT;需要转义(&lt;,&gt;,...)
  2. sparql查询需要以关键字&#34; SPARQL&#34;开头,否则virtuoso会将其解释为SQL查询
  3. sparql查询本身不正确,除了你有一个真正命名为http://localhost:8890/sparql的图形(请注意,查询中使用的图形是默认的sparql端点url本身,这是不需要的,因为我们通过jdbc访问数据)。
  4. 你需要将绑定强制转换为字符串,否则你会得到一个solr异常,说明solr不知道如何序列化virtuoso.jdbc4.VirtuosoExtendedString)
  5. &#34;柱&#34;指的是sparql查询中的bindingName。
  6. &#34;名称&#34;是指solr文档的fieldname
  7. 假设找到了所需的驱动程序,并且您想索引dcterms:抽象文本,以下数据配置应该有效

    <dataConfig>
    <dataSource driver="virtuoso.jdbc4.Driver" url="jdbc:virtuoso://localhost:1111/" user="dba" password="dba" />
    <document>
        <entity name="item" query="SPARQL SELECT (STR(?s) AS ?s) (STR(?o) AS ?o) FROM &lt;<urn:graph.to.be.indexed>&gt; WHERE { ?s &lt;http://purl.org/dc/terms/abstract&gt; ?o FILTER(?o!='')}">
            <field column="s" name="id" />
            <field column="o" name="abstract_txt_en" />
        </entity>
    </document>