Solr 9.6(Lucene 9.10) vs. Solr 9.7(Lucene 9.11) におけるベクター検索の問題 | KandaSearch Community Support Forum

Solr 9.6(Lucene 9.10) vs. Solr 9.7(Lucene 9.11) におけるベクター検索の問題

トピック作成者:ks-solruserml-bot (2025/03/23 21:05 投稿)
6
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/45wql440dhpycmbc64f3yh52l7b91l3v into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、
Solr 9.6(Lucene 9.10)と Solr 9.7(Lucene 9.11)での ベクター検索の挙動の変更 についてお知らせしたいと思います。

私たちは ベクター検索親ドキュメントのフィルタークエリ(filter query) と組み合わせて広く利用しています。
通常、クエリは以下のような形式です:

select?q={ knn f=vector topK=2048}[...]
rows=100
fq={ child of='childtype:root'}...
start=0
sort=score desc,ID desc

しかし、Solr 9.7 以降 では、このクエリの約 10% で以下のエラーが発生するようになりました:

java.lang.IllegalArgumentException: Doc id 27227879 doesn't match the query
at org.apache.lucene.search.TopFieldCollector.populateScores(TopFieldCollector.java:478) ~[?:?]
at org.apache.solr.search.SolrIndexSearcher.populateScoresIfNeeded(SolrIndexSearcher.java:1812) ~[?:?]
at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:2001) ~[?:?]
at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1775) ~[?:?]
at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:772) ~[?:?]
at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:767) ~[?:?]

数日間のデバッグの結果、エラーの発生率が topK の値と相関している ことを確認しました:

topK の値 エラーの発生回数
k = 8 44 回
k = 2048 17 回
k = 16384 1 回

回避策

この問題を回避するために、ソートパラメータを以下のように変更 しました:

修正前:

sort=score desc,ID desc

修正後:

sort=score desc

この変更後、クエリは正常に動作 するようになりました。

元々、ID desc のソートを追加したのは 検索結果を再現性のあるものにするため でしたが、
厳密には 必須ではなかった ため、削除することで問題を回避しました。

質問

この Solr / Lucene の挙動の変更意図的なもの でしょうか?
もしそうであれば、ベクター検索のドキュメント に「追加のソート条件を指定するとエラーが発生する可能性がある」旨を記載していただけると助かります。

よろしくお願いいたします。

Dr. Andreas Moll

返信投稿者:ks-solruserml-bot (2025/03/23 21:06 投稿)

KNN検索が複数のソート条件をサポートしているかどうかはわかりません。
Luceneのコードを詳しく調査する必要がありますが、近い将来にその時間は取れそうにありません。

いずれにせよ、追加のスコア条件によって取得された topK の「並び順」 を変更できる可能性はありますが、
topK の「取得方法」自体には影響を与えない と思われます。

本当に価値があるのは、
この問題を 再現できること であり、
さらに良いのは、Solr のテスト(org.apache.solr.search.neural.KnnQParserTest)を使って再現できること です。

よろしくお願いします。

Alessandro Benedetti
ディレクター @ Sease Ltd.
Apache Lucene/Solr コミッター
Apache Solr PMC メンバー

返信投稿者:ks-solruserml-bot (2025/03/23 21:06 投稿)

この問題は確認済みで、Solr 9.8(現在リリース中)でテストしたところ、エラーは発生しませんでした。
原因は検索エグゼキューターの挙動によるもののようですが、正確な理由は特定できませんでした。

とにかく、Solr 9.8.0 のリリース後にテスト し、問題が解決するか確認してください。
リリースは 1日以内 に予定されています。

- Houston

返信投稿者:ks-solruserml-bot (2025/03/23 21:06 投稿)

こんにちは、

KNN アルゴリズムの結果が(非決定的になる可能性があるとはいえ)返ってきた後にのみ、「ID でソートする」タイブレーカーが影響することは認識していました。ただ、カーソルマーク検索などではタイブレーカーが必要となるため、すべてのクエリに追加するのがベストプラクティスだと考えていました。

すでに Solr 9.8 RC1 を確認しましたが、エラーは依然として発生しています。

この問題をチェックするために適用できる Solr のテストがあれば教えていただけますか?
新しいテストをセットアップして試してみます。

よろしくお願いします。

Andreas Moll

返信投稿者:ks-solruserml-bot (2025/03/23 21:06 投稿)

こんにちは、Andreas さん

org.apache.solr.CursorPagingTest は、cursorMark のためのシングルコアテストです。
または、org.apache.solr.search.neural.KnnQParserTest のような KNN クエリのテスト を修正するのもよいかもしれません。

ちなみに、「Solr」の正しい表記は私が書いたような形であり、あなたの表記は異なっています。

~ David

返信投稿者:ks-solruserml-bot (2025/03/23 21:07 投稿)

こんにちは David さん、

テストのセットアップの良い出発点を教えていただき、ありがとうございます。

私たちのユースケースに合うような ユニットテスト を作成しましたが、まだエラーを再現できていません。
おそらく、このエラーは セグメントファイルの状態 にも依存しているのではないかと考えています。
数日中にもう一度試してみようと思います。

また、「Solr」の正しいスペルを教えてくれてありがとう。
長年の習慣を直すのはなかなか難しいですね :)

よろしくお願いします、
Andreas

返信投稿者:ks-solruserml-bot (2025/03/23 21:07 投稿)

こんにちは、

この件についての簡単な続報です。

Lucene の開発者が問題の原因を特定し、修正する可能性があります。

🔗 関連リンク

よろしくお願いします、
Andreas

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?