フィールドを跨いだファセットカウントの統合

トピック作成者:ks-solruserml-bot (2024/07/26 22:53 投稿)
3
CloseClose

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

皆さん、こんにちは。

私たちには2つのマルチバリューフィールドがあり、どちらもユーザー名を含んでいます。この2つのフィールドを跨いでカウントを合算したいと考えています。例えば、以下の2つのドキュメントでファセットを行う場合:

doc1: { field1: [user1, user2], field2: [user3, user4] }
doc2: { field1: [user1, user3], field2: [user2] }

以下のようなカウントを期待します:

user1: 2
user2: 2
user3: 2
user4: 1

1つの選択肢として、2つのフィールドを組み合わせた新しいフィールドを作成し、それをファセットする方法があることは知っています。しかし、これらのリストは大きくなる可能性があり、何百万ものユニークユーザーがいる場合もあるため、データの重複を避けるためにカスタムのファセットプロセッサを実装しようと考えています。SimpleFacetsをサブクラス化し、新しいFacetComponentを登録する方法があるようですが、これはレガシーのファセットメソッドを使用しています。JSON APIで同様のことを行う方法はありますか?そもそもこのアプローチは推奨されるでしょうか?

ありがとうございます。
Julia

返信投稿者:ks-solruserml-bot (2024/07/26 22:53 投稿)

Juliaさん、こんにちは。

私の扱っているインデックスは更新頻度が低く、クエリが非常に頻繁に行われるため、インデックス時にcopyFieldディレクティブを使用してそのデータを複製すると思います。カスタムのファセットプロセッサを作成することには、Solrのアップグレードで壊れるリスクが伴います。

ドキュメントごとに何百万ものユニークユーザーを話しているのですか、それとも全体的にですか?インデックス時に数百のユーザーを複製することについては心配していません。複製されるかどうかに関わらず、クエリ時に返す必要のあるファセットの数は変わりません。

Thomas

返信投稿者:ks-solruserml-bot (2024/07/26 22:54 投稿)

Juliaさん、こんにちは。

なぜ2つのフィールドのファセット値をポストプロセスしないのか、よく分かりません。全体的に見て、JSONファセットは拡張可能ではありません(ちなみに、なぜでしょうか?)。それらをハックするには、FacetModuleを拡張し、カスタムファセットプロセッサをorg.apache.solr.search.facet.FacetParser#parseFacetOrStat(java.lang.String, java.lang.String, java.lang.Object)のあたりに挿入する必要があります。

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/07/26 22:54 投稿)

2つのフィールドでポストプロセスを行うということは、自分でページネーションも実装する必要があるかもしれません。これは、facet.limitやfacet.offsetを使う代わりになります。さらに、何百万ものユーザー名に対して行う可能性もあります。また、これによりfacet.mincountは無意味になります。

Thomas

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

KandaSearch

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

投稿の削除

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