2017-09-24 7 views
1

MarkLogic에서 측면 검색을 설정하고 있습니다. 나는 다음과 같은 범위 인덱스가 구성 :Marklogic 측면 검색 및 데이터 정렬

입니다

enter image description here

, 나는 두 개의 인덱스가 있습니다. 첫 번째는 네임 스페이스 http://www.corbas.co.uk/ns/presentations이고 로컬 이름은 keyword입니다. 두 번째 로컬 이름은 level입니다. 두 가지의 조합 URI는 http://marklogic.com/collation/en/S1입니다.

내가 정렬에 관련된 오류를 보려면 다음을 사용하여 검색하려고 :

xquery version "1.0-ml"; 


import module namespace search = "http://marklogic.com/appservices/search" 
    at "/MarkLogic/appservices/search/search.xqy"; 

search:search("levels:Intermediate", 
<options xmlns="http://marklogic.com/appservices/search"> 
    <return-results>true</return-results> 
    <return-facets>true</return-facets> 

    <constraint name="keywords" facet="true"> 
    <range type="xs:string" collation="http://marklogic.com/collation/en/S1"> 
     <element ns="http://www.corbas.co.uk/ns/presentations" name="keyword"/> 
    </range> 
    </constraint> 
    <constraint name="levels" facet="true"> 
    <range type="xs:string" collation="http://marklogic.com/collation/en/S1"> 
     <element ns="http://www.corbas.co.uk/ns/presentations" name="level"/> 
    </range> 
    </constraint> 

</options>) 

나는 다음과 같은 오류 얻을 :

XDMP-ELEMRIDXNOTFOUND: cts:search(fn:collection(), 
cts:element-range query(fn:QName("http://www.corbas.co.uk/ns/presentations","level"), 
"=", "Intermediate", ("collation=http://marklogic.com/collation/en/S1"), 1), 
("score-logtfidf", "faceted", cts:score-order("descending")), 
xs:double("1"),()) -- No string element range index for 
{http://www.corbas.co.uk/ns/presentations}level 
collation=http://marklogic.com/collation/en/S1 

내가 잘못하고있는 중이 야 무엇을?

답변

1

솔직히 다른 오류 메시지가 표시됩니다. 검색 옵션의 range 요소에 collation 속성을 추가하지 않았기 때문에 MarkLogic이 루트 정렬에 대한 색인을 찾을 수 없다는 불평을하기를 기대했을 것입니다.

아마도 도움이 될 것입니다.

HTH!

+0

흠. 나는 mispasted하는 것처럼 보인다. 검색의 데이터 정렬 속성이 어디에 있는지 확실하지 않아서 소스 코드가 수정되었습니다. 동일한 오류가 적용됩니다. –

+0

앱 서버의 기본 데이터 정렬의 의미는 무엇입니까? 색인에 지정된 데이터와 쿼리 된 데이터가 일치하지 않습니다. 이 증상 같은 건 없니? –

+0

app-server의 기본 데이터 정렬 (또는 코드의 프롤로그)은 cts 함수와 문자열 비교에 대한 기본 데이터 정렬을 제공합니다.데이터 정렬을 명시 적으로 지정하지 않으면 영향을 미칩니다. 항상 그것을 지정하면 놀라움이 줄어 듭니다. – grtjn

2

이상한 메시지. 심지어 그 정도면 멀리, 그럼 당신의 데이터베이스 기본 데이터 정렬이 변경된 것 같습니다. 질문에 대답하지 않습니다. 그냥 이상해.

FORST 오프, 난 항상 제약에 정렬을 추가합니다 : 당신의 인덱스 위치에와에 있는지 확인하기 위해 사용 cts:values() :

<search:range type="xs:string" facet="true" 
     collation="http://marklogic.com/collation/en/S1"> 

둘째, 나는 항상 쿼리 콘솔에서 범위 인덱스 문제를 해결 예상되는 네임 스페이스 및 데이터 정렬 이렇게하면 다른 레이어가 제거되고 인덱스가 예상대로 있는지 확인할 수 있습니다.

및 다른 항목 : 색인 생성까지 MarkLogic 범위 색인이 존재하지 않습니다. 데이터베이스에서 자동 색인을 사용 중지하지 않았으며 콘텐츠의 색인이 생성되지 않았습니까? 그러면 오류가 발생합니다.

+0

데이터베이스를 다시 작성하고 (Roxy와 함께) 루트 정렬을 사용하여 인덱스를 다시 작성했습니다. 그것은 모두 작동하는 것처럼 보이지만 지금 나는 왜 * 볼 수 있는지 확신합니다. 자동 인덱스가 켜져 있었지만이 문제를 이해하려고 할 때 지속적으로 콘텐츠를 다시로드하여 데이터베이스를 일종의 비정상적인 상태로 둡니다. –

+0

** ** 확실하지는 않습니다. –

+0

데이터베이스를 다시로드하기 전에 문제를 이해하기 위해 queryConsole에서 문제를 해결해야합니다. 이 중 일부를 배우는 동안 거의 즉각적으로 색인을 다시 생성 할 수있는 작은 샘플 데이터 세트를 제안합니다. 또한 자동 인덱싱을 해제하고 내 통제하에 수행하고 데이터베이스 상태 페이지를 새로 고쳐 정확한 상황을 파악합니다. –

1

귀하의 구성이 올바른 것처럼 보입니다. 이는 문제가 타이밍이라는 것을 나에게 시사합니다. 원하는 인덱스를 지정하면 MarkLogic에서 인덱스를 만들 수 있습니다. MarkLogic에서 색인 작성을 완료하기 전에 해당 색인이 필요한 조회를 실행하면이 오류가 발생합니다. 보유하고있는 컨텐츠의 양에 따라 작성 프로세스가 매우 빠르거나 몇 시간이 걸릴 수 있습니다.

상태를 확인하려면 브라우저에서 Admin UI (http://localhost:8001)로 이동하여 데이터베이스의 구성 페이지로 이동하십시오. Status 탭을 클릭하고 "Reindexing/Refragmenting State"를 찾으십시오. - MarkLogic이 여전히 다시 색인화하는 경우 여기에서 알려주므로 진행 상황에 대한 업데이트를 얻을 수 있습니다. (이 정보는 the Management API을 통해 얻을 수도 있습니다.)

+0

데이터베이스는 아이디어를 테스트하기에 매우 작기 때문에 다시 색인을 생성하면 시간이 거의 걸리지 않습니다. 저는 제가 사용하고있는 데이터 정렬에 문제가 있다고 확신합니다. 올바르게 사용하지 않는 것이 좋습니다. –