2015-01-21 3 views
1

Недавно я создал базу данных Virtuoso (версия 07.10.3207) с использованием данных dbpedia. Я пытаюсь создать для него некоторые запросы и сталкиваться с очень странными результатами. Например:Результаты Bizarre с bif: содержит - поврежденный индекс полного текста?

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

select ?s, ?p, ?o where { 
?s ?p ?o . 
?s rdfs:label "Almond"@en . 
?o bif:contains "mythical" 
} 

Это дает удар. Можно было бы ожидать, что это означает, что поле комментария (поле, которое соответствует «мифическому») для Алмонда содержит слово «мифический». Однако это не так. На самом деле это:

«Миндаль (/? M? Nd /) (Prunus dulcis, syn. Prunus amygdalus, Amygdalus communis, Amygdalus dulcis) (или бадам на индийском английском языке, от персидского: ???) является разновидностью дерева, обитающего на Ближнем Востоке и в Южной Азии. «Алмонд» также является названием съедобного и широко культивируемого семени этого дерева ». @ en

Многие другие запросы дают похожие результаты ,

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

Я попытался следующие, без супер-четкого понимания того, что именно они могли бы сделать, основываясь на других заметках я смог найти:

DB.DBA.RDF_OBJ_FT_RULE_ADD(null, null, 'All'); 
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ(); 
DB.DBA.RDF_OBJ_FT_RECOVER(); 
DB.DBA.VT_INDEX_DB_DBA_RDF_OBJ(); 

До сих пор нет костей. Я задаюсь вопросом, может ли это иметь отношение к искаженным символам в поле комментариев - конечная точка онлайн dbpedia отображает их правильно, в то время как моя установка Virtuoso просто дает вопросительные знаки, как видно выше. Не знаю даже, как начать приближаться к этому, хотя.

Я включил SQL_UTF8_EXECS = 1 в virtuoso.ini (и впоследствии перезапустил сервер), который по-прежнему оставил мне вопросительные знаки в результатах.

Фактически, это не имеет никакого отношения к этим вопросительным знакам; Я побежал следующий запрос:

select ?s, ?p, ?o where { 
?s ?p ?o . 
?o bif:contains "mythical" . 
FILTER (!regex(?o, "mythical", "i")) 
} 

Выбор псевдослучайных хитов, ни один из которых содержит "мифического" или "?":

"Asgrrr" "403 BC" "Потенциал бесконечности" " «Красота и зверь» (ток-шоу) » « Дорога шоссе Альберта 22 »

Тот же запрос, выполняемый в http://dbpedia.org/sparql, ничего не возвращает (как следует).

Любые идеи?

ответ

1

Восстановление базы данных не исправило проблему. Однако я смог получить рабочую версию, выполнив следующие шаги. Некоторые из них, возможно, были ненужными, но, учитывая, сколько времени это занимает, я не проводил контролируемые эксперименты, чтобы сузить до минимума.

Сначала удалите базу данных и связанные с ней файлы, чтобы начать с чистого листа.

Редактировать виртуоз.ини раскомментировать/включают:

SQL_UTF8_EXECS = 1 

Запуск Виртуоз, а затем из ISQL вопроса следующие команды:

DB.DBA.RDF_OBJ_FT_RULE_ADD (null, null, 'All'); 
DB.DBA.VT_BATCH_UPDATE ('DB.DBA.RDF_OBJ', 'OFF', null); 
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ(); 
DB.DBA.RDF_OBJ_FT_RECOVER(); 
COMMIT WORK; 
CHECKPOINT; 
CHECKPOINT_INTERVAL(60000); 

Затем загрузите данные.

Тогда звоните:

COMMIT WORK; 
CHECKPOINT; 
DB.DBA.VT_INC_INDEX_DB_DBA_RDF_OBJ(); 
CHECKPOINT; 
COMMIT WORK; 
CHECKPOINT; 
CHECKPOINT_INTERVAL(60); 
COMMIT WORK; 

Наслаждайтесь полностью текстовый поиск базы данных!