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

(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
トピックへ返信するには、ログインが必要です。