Lucene 2个数据集的Fuseki配置+;文本索引:如何使用海龟文件?

Lucene 2个数据集的Fuseki配置+;文本索引:如何使用海龟文件?,lucene,jena,fuseki,tdb,easyrdf,Lucene,Jena,Fuseki,Tdb,Easyrdf,我是fuseki的新手,希望在我们的项目中使用2个TDB数据集:一个小的用于我们自己的数据,另一个大的(168M三元组,从导入的数据) 我们需要索引数据,因为使用“FILTER(CONTAINS())”的SPARQL查询无法在大型数据集(“BnF_text”)上工作。 因此,我在这篇文章之后为“BnF_text”建立了一个文本索引:(但我不得不修改turtle配置文件以使text:query工作) 这是可行的,但我在“BnF_文本”中遇到了一个奇怪的问题:同一个查询有时会返回超时,我在fusek

我是fuseki的新手,希望在我们的项目中使用2个TDB数据集:一个小的用于我们自己的数据,另一个大的(168M三元组,从导入的数据)

我们需要索引数据,因为使用“FILTER(CONTAINS())”的SPARQL查询无法在大型数据集(“BnF_text”)上工作。 因此,我在这篇文章之后为“BnF_text”建立了一个文本索引:(但我不得不修改turtle配置文件以使
text:query
工作)

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

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

  • 我的配置文件有问题吗
  • 性能是否受两个数据集共存的影响
~~~~~~~~以下是我安装的详细信息:~~~~~~~

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

1) text_config.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 " .
@前缀:。
@前缀rdf:。
@前缀rdfs:。
@前缀tdb:。
@前缀ja:。
@前缀文本:。
@前缀fuseki:。
@前缀foaf:。
@前缀dcterms:。
##初始化TDB--------------------------------
[]ja:loadClass“com.hp.hpl.jena.tdb.tdb”。
tdb:datasetdb-rdfs:ja的子类:RDFDataset。
tdb:GraphTDB-rdfs:ja的子类:Model。
##初始化文本查询-------------------------------------
[]ja:loadClass“org.apache.jena.query.text.TextQuery”。
#TextDataset是具有文本索引的常规数据集。
text:TextDataset rdfs:ja的子类:RDFDataset。
#Lucene指数
text:TextIndexLucene rdfs:text:TextIndex的子类。
## ---------------------------------------------------------------
##必须修复此URI—它用于组装文本数据集。
:text_数据集rdf:type text:TextDataset;
文本:数据集:tdb_数据集_读写;
文本:索引;
.
#用于RDF存储的TDB数据集------------------------------

:tdb_dataset_readwrite#谢谢安迪,你说得对。问题来自EasyRDF,而不是Fuseki。我发现:,所以在vendor/easyrdf/easyrdf/lib/easyrdf/Http/Client.php中更改了超时,现在一切似乎都正常了。我将再做一些测试,然后试着把问题标记为已解决


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

如图所示,根本未设置查询超时。确保你在一个干净的地方跑步(没有旧的跑步/设置)。非常感谢你的快速回复,我会尽快尝试。但是你能解释一下为什么同一个查询有时正常工作吗?[PS,我也是StackOverflow的新手,告诉我我的帖子或评论是否需要改进]添加
[]rdf:type fuseki:Server;ja:context[ja:cxtName“arq:queryTimeout”;ja:cxtValue“5000000000000”]。
在text\u config.ttl中,它似乎要好得多。还将java的内存增加到8go(我在这里看到了一个示例:)。因此,我还有两个问题:1)对于大型数据集,我的查询是否过于复杂?(节点太多?请参见下文)2)尝试将超时设置为1000毫秒,但发现查询返回0个结果(无错误),这是正常行为吗?我不知道为什么有时它应该工作,除非将超时设置在某个位置。默认设置为无超时。查询复杂性没有限制。超时可能会导致没有结果(如果达到了第一个限制-请检查HTTP状态代码)或结果被截断(结果输出故意设置为非法语法-首先发送的状态代码为“200 OK”,并且是HTTP的一项功能,无法更改。以下是我的查询:
SELECT DISTINCT?titre?nom?prenom?dateEdition?manif where{别名foaf:familyName“Spinoza”。?别名foaf:familyName?名称。可选{别名foaf:givenName?prenom}别名owl:sameAs?auteur。?oeExpr2 dc_t:contributor?auteur。?oeExpr1 owl:sameAs?oeExpr2。?manif rdarel:Expression?oeExpr1。?manif文本:查询(dcterms:title“éthique”)。?manif dc_t:title?titre。?manif dc_t:date date edition.}按描述订购(?dateEdition)limit 100
我仍然有一个问题:我多次尝试用脚本发送相同的查询(在while循环中使用fuseki s-query),并注意到第一个请求的执行时间通常不同。例如,我有一次第一个请求的执行时间为76秒,其他请求的执行时间平均为+/-1秒。其他问题:当我使用s-query时,它是HTTP GET;但在我们的应用程序中,我们使用Ajax POST+EasyRDF;我没有做任何统计,但执行时间似乎更长使用Ajax POST。这会影响性能吗?或者我必须更改Apache配置吗?第一个请求首先涉及数据,后续请求可以从缓存中受益。许多三联存储确实有这种行为,并且大多有一些“预热阶段”。感谢您的解释。我已经做了一个改进性能的变通方法:发送一个虚拟查询来“唤醒”triple store。这在我的虚拟机上有效,但在我们的服务器上无效(可能是因为磁盘访问速度)。
@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" .