Следуя инструкциям я настроил индекс, который охватывает несколько (буквальных) предикатов:
PREFIX luc: <http://www.ontotext.com/owlim/lucene#> INSERT DATA { luc:index luc:setParam "uris" . luc:include luc:setParam "literals" . luc:moleculeSize luc:setParam "1" . luc:includePredicates luc:setParam "http://purl.org/dc/terms/title http://www.w3.org/2000/01/rdf-schema#label http://www.w3.org/2004/02/skos/core#prefLabel http://www.w3.org/2004/02/skos/core#altLabel" . }
и
PREFIX luc: <http://www.ontotext.com/owlim/lucene#> INSERT DATA { luc:${Cfg.literalIndex} luc:createIndex "true" . }
Эта часть работаетпросто хорошо.Теперь у меня вопрос: есть ли какой-нибудь способ получить совпадающий предикат или литерал в моем запросе SPARQL ?
Итак, предположим, что следующие данные:
:exA rdfs:label 'label' ; dct:title 'title' .
I 'Я хотел бы сделать что-то вроде этого
SELECT * WHERE { ?needle luc:labelIndex "title" ; luc:predicate ?predicate ; ?predicate ?label . }
Если что-то подобное luc:predicate существует, это может дать мне фактически сопоставленный предикат вместе со значением совпадений.Однако я даже не уверен, что Lucene индексирует предикат, который необходим для включения такой функции.
luc:predicate
Вы не можете сделать это эффективно с помощью старого плагина FTS Lucene. Однако Lucene Connectors легко поддерживает ваш вариант использования. Вот пример случая с некоторыми фиктивными данными:
Пример данных
<urn:a> a <http://www.w3.org/2004/02/skos/core#Concept> ; <http://purl.org/dc/terms/title> "title"; <http://www.w3.org/2000/01/rdf-schema#label> "label" ; <http://www.w3.org/2004/02/skos/core#prefLabel> "prefer label"; <http://www.w3.org/2004/02/skos/core#altLabel> "alt label" .
Примечание. Соединители индексируют данные для одного rdf:type. В вашем примере, я считаю, что вы должны иметь skos:Concept.
rdf:type
skos:Concept
Создание коннектора Lucene
Соединители будут индексировать для выбранного типа каждое свойство или цепочку свойств в отдельное поле Lucene.
PREFIX : <http://www.ontotext.com/connectors/lucene#> PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#> INSERT DATA { inst:fts :createConnector ''' { "types": [ "http://www.w3.org/2004/02/skos/core#Concept" ], "fields": [ { "fieldName": "label", "propertyChain": [ "http://www.w3.org/2000/01/rdf-schema#label" ] }, { "fieldName": "prefLabel", "propertyChain": [ "http://www.w3.org/2004/02/skos/core#prefLabel" ] }, { "fieldName": "altLabel", "propertyChain": [ "http://www.w3.org/2004/02/skos/core#altLabel" ] } ] } ''' . }
Возвращает соответствующие поля и фрагмент
PREFIX : <http://www.ontotext.com/connectors/lucene#> PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#> SELECT ?entity ?snippetField ?snippetText { ?search a inst:fts ; :query "label" ; :entities ?entity . ?entity :snippets _:s . _:s :snippetField ?snippetField ; :snippetText ?snippetText . }
Где в проекции: