Командная строка tdbquery с текстовым индексом

Я пытаюсь запустить запрос текстового поиска с Йеной через командную строку.

tdbquery  --desc textsearch.ttl  --query search.rq  

Запрос возвращает пустые результаты с сообщениями:

17:23:46 WARN  TextQueryPF          :: Failed to find the text index :    tried context and as a text-enabled dataset
17:23:46 WARN  TextQueryPF          :: No text index - no text search performed

Мой файл ассемблера:

    @prefix :        <http://localhost/jena_example/#> .
  @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#> .

  ## Example of a TDB dataset and text index
  ## Initialize TDB
  [] ja:loadClass "org.apache.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 .
  # Solr index
  text:TextIndexSolr    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   <#dataset> ;
    text:index     <#indexLucene> ;
    .

  # A TDB datset used for RDF storage
  <#dataset> rdf:type      tdb:DatasetTDB ;
    tdb:location "DB2" ;
    tdb:unionDefaultGraph true ; # Optional
    .

  # Text index description
  <#indexLucene> a text:TextIndexLucene ;
    text:directory <file:Lucene2> ;
    ##text:directory "mem" ;
    text:entityMap <#entMap> ;
    .

  # Mapping in the index
  # URI stored in field "uri"
  # rdfs:label is mapped to field "text"
  <#entMap> a text:EntityMap ;
    text:entityField      "uri" ;
    text:defaultField     "text" ;
    text:map (
         [ text:field "text" ; text:predicate rdfs:label ]
         ) .

Мой запрос:

  PREFIX text: <http://jena.apache.org/text#>
  PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

  SELECT ?s
  { ?s text:query 'London' ; 
       rdfs:label ?label 
  }

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

1 ответ

Во-первых, вы можете сделать поиск текста за пределами Fuseki. Пример, из которого вы взяли код, показывает, как это сделать, используя простой набор данных Jena в Java.

Во-вторых, Энди Сиборн из списка рассылки Jena предлагает следующее:

SELECT (count(*) AS ?C) { ?x text:query .... }

чтобы "дотронуться" до индекса перед выполнением реальных запросов.

Другие вопросы по тегам