2017-09-13 20 views
1

우리는 xquery를 사용하여 검색을 수행하는 다양한 xml 문서를 저장하기 위해 exist-db베이스를 사용합니다. 이것은 XML 문서의 예는 다음과 같습니다XQuery 퍼지 검색 in exist-db

<person personID="some_id"> 
 
    <name> 
 
     <familyName>Doe</familyName> 
 
     <firstName>John</firstName> 
 
    </name> 
 
</person>

우리가 사용하고있는 검색 퍼지 검색, 그리고 쿼리는 다음과 같은 형태로되어

xquery version "3.0"; 
 
for $doc in collection('/db/Persons')/*[ft:query(.,'milan~')] 
 
let $score := ft:score($doc) 
 
order by $score descending return base-uri($doc)

문제는 검색 명령 결과가 다소 이상하다는 것입니다. 예를 들면, 밀란, Milun, 골란, 빌론의 앞에 밀라노의 앞에 등급을 매긴다. 즉, 검색은 정확한 일치 (밀란)와 정확히 일치하지 않는 결과에 더 큰 점수를 지정합니다. 우리가 뭘 잘못하고 있니? 정확한 일치가 거의 정확한 일치보다 높은 점수를 갖는 방법이 있습니까?

답변

0

eXist-db의 전문 검색 인덱스는 Apache Lucene 위에 작성되었습니다. 이 문제는 Lucene 버그 추적기 (https://issues.apache.org/jira/browse/LUCENE-329 참조)와 ElasticSearch (https://github.com/elastic/elasticsearch/issues/20369 참조)와 같은 다른 제품에서보고되었으며 Lucene 5.3에서 수정본은 https://svn.apache.org/viewvc?view=revision&revision=1680548으로 작성되었습니다.

eXist가 이러한 개선의 이점을 얻으려면 eXist는 Lucene 라이브러리를 현재 eXist 릴리스 인 Lucene 4.10.4에서 Lucene 5.3 이상으로 업그레이드해야합니다. Lucene 4.x와 5.x + 사이의 일부 API 비 호환성으로 인해 eXist가이 점프를하지 못하게되었습니다 (공개 된 문제 https://github.com/eXist-db/exist/issues/1160 참조).하지만 도전은 극복 할 수 없다고 생각합니다.

한편 해결 방법으로 정확한 일치를 찾는 추가 쿼리를 추가하여 이만 또는 퍼지 일치 위의 첫 번째 조회로 반환 할 수 있습니다. 응용 프로그램에 따라 사용자 제공 입력에서 물결표를 제거해야 할 수도 있지만 목표를 달성해야합니다.