2014-02-11 2 views
2

XQuery로 작성된 기존 Marklogic 응용 프로그램을 작성 중입니다.Marklogic에서 사용자 입력을 기반으로 맞춤 기간을 만드는 방법은 무엇입니까?

<constraint name="date" xmlns="http://marklogic.com/appservices/search"> 
    <range type="xs:gYear"> 
     <element ns="http://digital.library.ptsem.edu/ia" name="date"/> 
     <bucket name="any-1800" lt="1801">–1800</bucket> 
     <bucket name="1801-1825" ge="1801" lt="1826">1801–1825</bucket> 
     <bucket name="1826-1850" ge="1826" lt="1851">1826–1850</bucket> 
     <bucket name="1851-1875" ge="1851" lt="1876">1851–1875</bucket> 
     <bucket name="1876-1900" ge="1876" lt="1901">1876–1900</bucket> 
     <bucket name="1901-1925" ge="1901" lt="1926">1901–1925</bucket> 
     <bucket name="1926-any" ge="1926">1926–</bucket> 
    </range> 
    </constraint> 

사용자가 현재 UI에 해당면을 클릭하여 이러한 날짜 범위를 선택할 수있는 옵션이 : 우리는 현재 설정과 같이 정의 된 날짜 범위에 패 시팅 (faceting) 허용하는 버킷 제약이있다.

사용자가 원하는 날짜 범위로 검색하기 위해 양식의 시작일과 종료일을 입력 할 수 있습니다. 예를 들어, 그들은 텍스트 형식으로 1950 - 1970을 입력하고이 범위를 검색 할 수 있습니다. 나는 이러한 사용자 지정 범위가 검색 옵션에서 현재 날짜 버킷 제약 조건을 제거하고 대신 범위 제약 조건을 사용하여 구현할 수 있으므로 쿼리 텍스트에서 (date-start : 1800 및 date-end : 1900)과 같은 작업을 수행 할 수 있다고 생각합니다. . 또 다른 옵션은 사용자가 입력 한 연도를 기반으로 즉석에서 버킷 제약 조건을 설정하는 것입니다.

나는 어디서부터 시작해야할지, 아니면 최선의 접근 방법이 무엇인지 알지 못합니다. 누구나 비슷한 것을했거나이를 구현하는 최선의 방법에 대한 권장 사항이 있습니까?

감사합니다.

+1

이 게시물 (및 의견)을 시작해야합니다. http://blog.davidcassel.net/2012/06/wildcards-in-marklogic-date-queries/ – joemfb

답변

2

제약 조건에서 버킷을 제거하면 현재 패싯이 손실됩니다. 그래서 그것은 옵션처럼 들리지 않습니다.

잘 모르겠지만 설명 된대로 이미 해당 날짜 제약 조건을 사용할 수 있습니다. 유일한 catch는 -start 및 -end 표기법이 내가 아는 한 Corona 스타일이며 search : search 및 search : 'GE 1800 AND date date 1900'과 같은 구문을 기대합니다. 위의 joemfb의 주석에서 언급 된 링크는이 구문도 언급합니다.

버킷 때문에 현재 날짜 제약 조건을 사용하여 작업 할 수없는 경우 두 가지 제약 조건을 적용하면됩니다. 패싯 용 버킷을 포함하는 하나의 dateFacets 및 사용자 정의 검색 용 버킷.

원하는 경우 미리 파싱을 약간 할 수 있습니다. date : 1950-1970과 같은 패턴이 있으면 문자열 함수를 사용하여 GE/LT 표현식 날짜로 다시 작성할 수 있습니다. 고정 패턴이 주어질 수 있어야합니다. 실행시에도 아무런 문제가 없습니다.

맞춤 버킷 생성은 또한 작동합니다. 특정 검색 패턴에 대해 특수 버킷을 생성하는 것은 매우 쉽습니다. 실제로 위에서 언급 한 블로그 게시물에 댓글을 남겼습니다.

실제로 많은 방법이 있습니다.

HTH!