2017-02-13 20 views
1

다음은 데이터베이스에 삽입 한 문서입니다.MarkLogic에서 xml 간의 관계를 정의하고 검색 API에서이를 사용하는 방법은 무엇입니까?

<biblio> 
    <biblioid>123</biblioid> 
    <mediaid>456</mediaid> 
    <name>dixit</name> 
    <title>title</title> 
</biblio> 

<biblio> 
    <biblioid>456</biblioid> 
    <mediaid>789</mediaid> 
    <name>singla</name> 
    <title>title1</title> 
</biblio> 

<media> 
    <mediaid>456</mediaid> 
    <mediaName>media1</mediaName> 
    <title>hello</title> 
</media> 

<media> 
    <mediaid>789</mediaid> 
    <mediaName>media1</mediaName> 
    <title>hello</title> 
</media> 

<media> 
    <mediaid>384</mediaid> 
    <mediaName>media2</mediaName> 
    <title>hello</title> 
</media> 

나는 "media1"<media>에 및 <medianame>"딕 시트"로 <biblio><name>을 갖는 문서를 검색 할 수 있습니다. 내가 먼저 모든되는 Biblio를 얻어서,이를 달성 할 수있는 우리의 경우와 마찬가지로, 결과는

<biblio> 
    <biblioid>123</biblioid> 
    <mediaid>456</mediaid> 
    <name>dixit</name> <!-- name is matching ("dixit")--> 
    <title>title</title> 
</biblio> 

<media> 
    <mediaid>456</mediaid> <!-- mediaid is same as in biblio/mediaid --> 
    <mediaName>media1</mediaName> <!-- medianame is matching ("media1") --> 
    <title>hello</title> 
</media> 

될 것

biblio/mediaid 같이

하지만 <mediaid>을 가진 문서 만의 확인해야합니다은 동일합니다 docs는 이름 ("dixit")과 일치 한 다음 mediaid (456)를 추출한 다음 가져온 미디어 ID (456) 및 중간 이름 (media1)을 사용하여 미디어 문서를 쿼리합니다.

하지만 검색 : 검색 API를 통해이를 수행하고 싶습니다.

이렇게하는 방법은 없나요? 그리고 xml 요소 간의 관계를 정의 할 수있는 곳이 있습니까?

+0

나는 하나의'search : seach' 호출로 이것을 할 수 있다고 생각하지 않습니다. 왜 당신은 하나의 쿼리에서 문서와 미디어를 혼합하고 싶습니까? 나는 당신이 수출 목적으로 이것을 원할지도 모른다고 상상할 수 있습니다. – grtjn

답변

4

media : id에 범위 인덱스를 넣으면 초고속 조인을 수행 할 수 있습니다. 그것은 전투의 1/2입니다.

나머지 절반은 다음과 같습니다.이 문제를 해결하려면 cts 및 xQuery를 사용합니다.

그러나 검색 : 검색의 일부로이 작업을 수행하려는 경우 사용자 지정 제약 조건을 적용하여 수행 할 수 있습니다. 그러면 검색 : 검색 라이브러리를 통해 자연스럽게 호출 할 수 있습니다.

가능한 사용자 정의 제약 조건 : 문서 쿼리 : 해당 이름을 가진 매체를 사용되는 Biblio 참조

  • 돌려 CT에
  • 해결이를위한 되는 Biblio 별 미디어 이름

    • 검색 * biblio 문서의

    다음 "biblio-name"이라는 biblio 이름에 제약 조건이있는 경우 아래 예제와 같은 검색을 할 수 있습니다. 마지막에 검색 API를 통해 게재 :

    biblio-name:Dixit AND biblio-by-media-name:media1 
    

    * 문서 쿼리는 하나의 접근 방식입니다. 그러나 필자는 biblio URI가 아니라 아마도 biblio 파일의 mediaid 요소에 대한 범위 쿼리에서이를 빌드 할 수 있습니다. 하지만 그건 모두 튜닝에 관한 것입니다. 결과는 위의보다 단순화 된 예와 동일합니다.

    https://docs.marklogic.com/guide/search-dev/search-api#id_49750

  • +0

    감사합니다. 지식면에서 나는 cts와 xQuery로 어떻게 할 것인지 알고 싶습니다. –

    +0

    당신은 오신 것을 환영합니다.cts/xQuery의 경우 - 기본적으로 사용자 정의 제약 조건에 사용 된 것과 동일한 함수를 사용합니다. 검색 레이어를 모두 제거하는 중입니다. 그게 말이 되니? –