2015-01-21 2 views
1

나는 최근에 dbpedia 데이터를 사용하여 Virtuoso 데이터베이스 (버전 07.10.3207)를 만들었습니다. 내가 그것에 대한 몇 가지 쿼리를 구축하고 아주 이상한 결과가 발생하는 중이 야. 한 예 :bif : contains - 손상된 전체 텍스트 인덱스가있는 기괴한 결과?

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" 
} 

이 경우 히트가 발생합니다. Almond에 대한 설명 필드 ("mythical"와 일치하는 필드)에 "mythical"이라는 단어가 포함되어있을 수 있습니다. 그러나 그렇지 않습니다. 사실 :

"아몬드 (/ ?? m? nd /) (Prunus dulcis, syn. Prunus amygdalus, Amygdalus communis, Amygdalus dulcis) (또는 인도 영어의 badam : 페르시아어 : ??? ???) "아몬드"는이 나무의 식용되고 널리 재배 된 씨앗의 이름이기도합니다. "@ 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 설치는 위와 같이 물음표를 표시합니다. 이 접근법을 시작하는 방법조차도 모른다.

나는 virtuoso.ini 파일에 SQL_UTF8_EXECS = 1을 포함 시켰으며 (결과적으로 서버를 재시작 함) 여전히 결과에 물음표가 남았습니다.

실제로 이러한 물음표와 아무런 관련이없는 것으로 보입니다.

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); 

그런 다음, 데이터를로드 INI이 /가 포함 주석을 해제합니다. 그런 다음

, 전화 :

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

당신의 완전 텍스트 검색 할 수있는 데이터베이스를 즐기십시오!