Использование подстановочных знаков в коннекторе Lucene GraphDB - PullRequest
0 голосов
/ 25 июня 2018

Я использую разъемы Lucene от GraphDB . Я строю индекс my_index для кодов сущностей в моем тройном хранилище, и я хотел бы использовать такой индекс для сопоставления подстрок.

Пример.

Коды объектов:

FooBar
FooBaz
BazFoo

Lucene Connector:

PREFIX :<http://www.ontotext.com/connectors/lucene#>
PREFIX inst:<http://www.ontotext.com/connectors/lucene/instance#>
INSERT DATA {
    inst:my_index :createConnector '''
{
  "fields": [
    {
      "fieldName": "code",
      "propertyChain": [
        "http://foo#identifier"
      ],
      "indexed": true,
      "stored": true,
      "analyzed": true,
      "multivalued": true,
      "facet": true
    }
  ],
  "types": [
    http://foo#MyType"
  ],
  "stripMarkup": false
}
''' .
}

SPARQL запрос об использовании соединителя Lucene:

PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>

SELECT ?entity {
  ?search a inst:my_index ;
      :query "code:Foo*" ;
      :entities ?entity .
}

Я хотел бы получить все сущности с кодом, начинающимся с Foo (т.е. FooBar, FooBaz), но вместо этого я получил пустой набор результатов.

Как мне их получить?

Edit:

Испытав пример в ответе Вассила , я обнаружил, что проблема может быть связана с чувствительностью к регистру .

Поведение:

  • :query "label:Foo*" ничего не возвращает

  • :query "label:foo*" возвращает FooBar и FooBaz

1 Ответ

0 голосов
/ 25 июня 2018

Поиск по префиксу должен работать по умолчанию из коробки.Я подозреваю, что есть еще одна проблема с вашим запросом.Что произойдет, если вы будете искать все возможные значения с помощью :query "*:*"?

Вот контрольный пример, чтобы проверить и повторить его с вашим набором данных.

Создание образца фиктивных данных

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
INSERT DATA
{
    <urn:1> a <urn:type>;
        rdfs:label "FooBar".
    <urn:2> a <urn:type>;
        rdfs:label "FooBaz".
    <urn:3> a <urn:type>;
        rdfs:label "BazFoo".
}

Вам также потребуетсяопределить оператор rdf:type для каждого ресурса RDF.

Создать соединитель Lucene

PREFIX :<http://www.ontotext.com/connectors/lucene#>
PREFIX inst:<http://www.ontotext.com/connectors/lucene/instance#>
INSERT DATA {
    inst:my_index :createConnector '''
{
  "fields": [
    {
      "fieldName": "label",
      "propertyChain": [
        "http://www.w3.org/2000/01/rdf-schema#label"
      ],
      "indexed": true,
      "stored": true,
      "analyzed": true,
      "multivalued": true,
      "facet": true
    }
  ],
  "types": [
    "urn:type"
  ],
  "stripMarkup": false
}
''' .
}

Соединитель будет индексировать все значения rdfs:label для всех классов urn:type.

Проверка поиска префикса

PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>

SELECT ?entity {
  ?search a inst:my_index ;
      :query "label:Foo*" ;
      :entities ?entity .
}

База данных возвращает urn:1 и urn:2

...