代码之家  ›  专栏  ›  技术社区  ›  vvffl

Fuseki配置2个数据集+文本索引:如何使用turtle文件?

  •  1
  • vvffl  · 技术社区  · 7 年前

    我是fuseki的新手,希望在我们的项目中使用2个TDB数据集:一个小的用于我们自己的数据,另一个大的(1.68亿个三元组,从 http://data.bnf.fr ).

    我们需要对数据进行索引,因为使用“FILTER(CONTAINS())”的SPARQL查询在大型数据集(“BnF\U text”)上不起作用。 因此,我为“BnF\U文本”建立了一个文本索引,如下所示: Fuseki indexed (Lucene) text search returns no results (但我不得不修改turtle配置文件以获得 text:query 正在工作)。

    这是可行的,但我在“BnF\U文本”中遇到了一个奇怪的问题:同一个查询有时会返回超时,我在fuseki日志和apache日志中都看不到find error。

    ~~~~~~以下是我的问题:~~~~~~~

    • 我的配置文件有问题吗?
    • 性能是否受两个数据集共存的影响?

    ~~~~~~以下是我安装的详细信息:~~~~~~~

    • 修改了脚本中的Java内存限制 fuseki-server :设置为 --Xmx4000M .
    • SPARQL查询通过PHP EasyRDF库发送
    • 我有2个配置文件: $FUSEKI_PATH/text_config.ttl + $FUSEKI_PATH/run/configuration/MY_DATASET.ttl
    • 我使用以下命令运行fuseki server: ./fuseki-server --config text_config.ttl

    配置文件

    1) text\u配置。ttl公司

    @prefix :        <#> .
    @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
    @prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
    @prefix text:    <http://jena.apache.org/text#> .
    @prefix fuseki:  <http://jena.apache.org/fuseki#> .
    @prefix foaf: <http://xmlns.com/foaf/0.1/> .
    @prefix dcterms: <http://purl.org/dc/terms/> .
    
    ## Initialize TDB --------------------------------
    
    [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
    tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
    tdb:GraphTDB    rdfs:subClassOf  ja:Model .
    
    ## Initialize text query -------------------------------------
    [] ja:loadClass       "org.apache.jena.query.text.TextQuery" .
    # A TextDataset is a regular dataset with a text index.
    text:TextDataset      rdfs:subClassOf   ja:RDFDataset .
    # Lucene index
    text:TextIndexLucene  rdfs:subClassOf   text:TextIndex .
    
    ## ---------------------------------------------------------------
    ## This URI must be fixed - it's used to assemble the text dataset.
    
    :text_dataset rdf:type     text:TextDataset ;
    
        text:dataset :tdb_dataset_readwrite ;
        text:index     <#indexLucene> ;
        .
    
    # A TDB datset used for RDF storage ------------------------------
    :tdb_dataset_readwrite                    # <= EDIT : instead of <#dataset>  
            a             tdb:DatasetTDB ;
            tdb:location  "TDB_PATH" ;
    .
    
    # Text index description ------------------------------------------
    <#indexLucene> a text:TextIndexLucene ;
        text:directory <file:LUCENE_PATH> ;
        text:entityMap <#entMap> ;
        text:storeValues true ;
        .
    
    # Mapping in the index ---------------------------------------------
    # URI stored in field "uri" 
    <#entMap> a text:EntityMap ;
        text:entityField      "uri" ;
        text:defaultField     "text" ;
        text:map (
             [ text:field "text" ; text:predicate dcterms:title ]
             [ text:field "text" ; text:predicate foaf:familyName ]
             [ text:field "text" ; text:predicate foaf:name ]
             ) .
    
    # Fuseki services (http) --------------------------------------------- 
    
    # EDIT : added following lines
    
    :service_tdb_all  a                   fuseki:Service ;
            rdfs:label                    "TDB BnF_text" ;
            fuseki:dataset                :text_dataset ; ### 
            fuseki:name                   "BnF_text" ;
            fuseki:serviceQuery           "query" , "sparql" ;
            fuseki:serviceReadGraphStore  "get" ;
            fuseki:serviceReadWriteGraphStore " .
    

    2) MY\u数据集。ttl公司

    @prefix :      <http://base/#> .
    @prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
    @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
    @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix fuseki: <http://jena.apache.org/fuseki#> .
    
    :service_tdb_all  a                   fuseki:Service ;
            rdfs:label                    "TDB MY_DATASET" ;
            fuseki:dataset                :tdb_dataset_readwrite ;
            fuseki:name                   "MY_DATASET" ;
            fuseki:serviceQuery           "query" , "sparql" ;
            fuseki:serviceReadGraphStore  "get" ;
            fuseki:serviceReadWriteGraphStore
                    "data" ;
            fuseki:serviceUpdate          "update" ;
            fuseki:serviceUpload          "upload" .
    
    :tdb_dataset_readwrite
            a             tdb:DatasetTDB ;
            tdb:location  "MY_DATASET_TDB_PATH" .
    

    提前感谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   vvffl    7 年前

    谢谢安迪,你说得对。问题来自EasyRDF,而不是Fuseki。我发现了这个: https://groups.google.com/d/msg/skosmos-users/WhtZwnsxOFs/MtAocr8vDgAJ ,因此更改了供应商/easyrdf/easyrdf/lib/easyrdf/Http/Client中的超时。php,现在一切似乎都好了。我将再做几个测试,然后试着把问题标记为已解决。

    编辑:“现在一切似乎正常”=来自的“超时”消息 EasyRdf_Exception 已消失