2017-11-17 18 views
0

을 예상대로 작동하지 않습니다.MarkLogic 필터링되지 않은 발음 구별 검색 내가 <code>diacritic</code><code>cts:query</code> 예상대로 작동하지 않는</p> <p><code>unfiltered cts:search</code> ML 8을 사용하고

아래 예를 찾으십시오.

나는 실행하고 URI /diacritic/a.xml

<root> 
    <name>öily</name> 
</root> 

cts:search 쿼리 ML DB에서 다음 XML을 삽입했습니다.

cts:search(
    doc('/diacritic/a.xml'), 
    cts:element-value-query(xs:QName('name'), 'oily', ('diacritic-sensitive')), 
    'unfiltered' 
) 

위 CTS : 쿼리 나에게 위의 문서를 반환하지만 diacritic-sensitive 옵션이 존재대로 반환하지 않아야합니다.

filtered에 대한 검색 결과 양호합니다.

참고 : fast diacritic sensitive searches이 도와주세요 진정한

로 설정됩니다.

+0

데이터베이스에 대해 사용자의 데이터 정렬을 설정하십시오. 쿼리 자체는 데이터베이스 자체에 설정되거나 MarkLogic의 기본 데이터 정렬을 사용하여 기본값으로 가정됩니다. 이것을 알면 사람들이 적절한 답을 찾는데 도움이 될 것입니다. –

+0

데이터베이스의 데이터 정렬을 어디에 설정할 수 있는지 잘 모르겠습니다. 'fn : default-collation'이 나에게'http : // marklogic.com/collation /'을 돌려주었습니다. 이것이 정확한지 또는 더 자세한 정보가 필요한지 알려주세요. –

+0

데이터 정렬을 이해하고 검색 결과에 미치는 영향을 이해하려면이 섹션을 참조해야한다고 생각합니다. https://docs.marklogic.com/guide/search-dev/encodings_collations 답변으로 게시하지 않을 수도 있습니다. 문제가되지 마라. 그러나 위의 내용을 조사하고보고하기 위해 여기에 배경이 필요하다고 생각합니다. –

답변

1

데이터 정렬은 검색어와 관련이 없습니다 (범위 검색어 제외).

여기에서 문제는 색인 생성이 작동하는 방식입니다. 키는 구분 기호에 구별되지 않는 키라는 것을 모르고 키의 문자 만 알 수 있습니다. 단어의 분음 부호에 영향을받지 않는 키를 계산하기 위해 발음 구별 부호를 제거하고 남아있는 것부터 키를 만듭니다. 단어의 분음 기호에 민감한 키를 계산하기 위해 발음 구분 기호를 제거하지 않고 그대로 단어와 함께 키를 만듭니다.

이 경우 diacritic-insensitive-key (유성) = diacritic-sensitive-ke (기름진) = diacritic-insensitive-key (ibleily)! = diacritic-sensitive-key (öily).

그래서 색인을 통해 차이를 해결할 수 없습니다. 분노에 민감한 öily 검색은 색인에서 유성과 일치하지 않지만 그 반대는 사실이 아닙니다.

정확한 결과를 얻으려면 필터링해야합니다.

부록 : 왜 우리는 분극 감도를 키에 포함시켜야합니까? 이는 색인의 크기를 크게 늘릴 수 있기 때문입니다 (발음 구별 부호는 x2, 대소 문자는 x2).