私は多くを持っています製品はelasticsearchでインデックスされています。私はelasticsearchのクエリから(私はSQLデータベースから取得している)idsのリストを除外する必要があります。がelasticsearchの結果から大量のIDを除外する方法は?
{
"id" : "1",
"name" : "shirt",
"size" : "xl"
}
、として保存されていると仮定 製品は、我々はelasticsearchを使用して、いくつかのアルゴリズムに基づいて顧客に推奨される製品のリストを表示します。 お客様が「興味がない」と商品をマークした場合、その商品を再度表示する必要はありません。 我々はで別のSQLテーブルにこのような製品を保つためには、 'not_interested'、CUSTOMER_IDと状態をPRODUCT_ID。ランタイム上の顧客のための提言をフェッチ中
は今、私たちは、SQLデータベースから「not_interestedの製品のリストを取得し、勧告からそれらを除外するelasticsearchでフィルタリングしないでproduct_idsの配列を送信します。 product_ids配列のサイズが大きくなりすぎると問題が発生します。
elasticsearchにのみproduct_idとcustomer_idのマッピングを格納する必要があります 'not_interested'製品を実行時にフィルタリングするにはelasticsearchのみを使用しますか?
これらをネストされたオブジェクトまたは親/子ドキュメントとして格納することは意味がありますか?または、いくつかのIDを結果から効率的に除外できるように格納するための完全に別の方法。
ネゲートされるIDのリストが巨大なリストである場合、これは問題にはなりません。そのような文書IDのうち何万ものものがあるとしましょう。 –
このクエリはユースケースに合わせて最適化されているため、このサーバー側では問題ありません。私は何千ものためにこれをして、それはまだ非常に速かった!それが遅くなるのを見るには、これはあなたのインデックスサイズに依存するので、これをテストしなければなりませんが、これは非常に高い数値になります。 – drjz
@drjz elasticsearchの実装については、https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.htmlに詳しく記載されています。これと同様のものをSolrにも用意できますか? docIdsが巨大な場合、_fq = - {!terms f = id} doc334、doc125、doc777、doc321、doc253_はクエリの長さ制限に達します。 Solrでこれを実装する方法は他にありますか?ESで行われています。 –