2017-09-13 6 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)

です問題は、検索オーダーがかなり奇妙な結果になることです。たとえば、ミルン、ミルン、ゴラン、ヴィロンミラノの前にランクされます。言い換えると、検索では完全一致(ミラノ)と完全一致しない結果に大きなスコアが割り当てられます。私たちは何を間違っていますか?完全一致がほぼ正確な一致に比べて高いスコアを持つ方法はありますか?

答えて

0

eXist-dbのフルテキスト検索インデックスは、Apache Luceneの上に構築されています。この問題は、ElasticSearch(https://github.com/elastic/elasticsearch/issues/20369参照)のようなLuceneバグトラッカー(https://issues.apache.org/jira/browse/LUCENE-329参照)とその上に構築された他の製品で報告され、Lucene 5.3で修正されました。https://svn.apache.org/viewvc?view=revision&revision=1680548で修正されました。

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を参照してください)。しかし、私はその課題が克服できないと考えています。

一方、回避策として、完全一致を検索し、これだけを返すか、ファジーマッチの上に最初のヒットとして返すクエリを追加できます。アプリケーションによっては、ユーザーが入力した文字列からチルダを取り除く必要があるかもしれませんが、これは目標を達成するはずです。

関連する問題