"structure"を含むフィールドを使用する/検索する
(The bot translated the original post https://lists.apache.org/thread/p42wrb8frqj8w3nycpxfypsv451l8xfp into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
皆さん、
Solr / Luceneではドキュメント内で任意のフィールドを定義することができないため、ドキュメント内に構造化情報をどのように保存するのが推奨されるのか、気になっています。
私はエンティティに関する情報を保存し、関連エンティティ(インデックスに保存されていない)に特有の情報を保存したいと考えています。実際のユースケースではありませんが、例として、ユーザーが異なる場所で異なる特権を持っているとします。
もしSolr / Luceneがそれを許可していたら、次のようにモデル化するかもしれませんでした:
users: [
{
"username": "chris",
"locations": ["denver", "chicago", "washington"],
"location_denver_role": "admin",
"location_chicago_role": "staff",
"location_washington_role": "basic"
},
{ ... }
]
私は「location_denver_role」、「location_chicago_role」などというフィールドを持てない(もちろん、持つことはできますが、多数の場所を扱う必要があり、それぞれのためにフィールドを定義するのは愚かなように思えます)、そのため、以下のような方法を考えています:
users: [
{
"username": "chris",
"locations": ["denver", "chicago", "washington"],
"location_roles": [
{ "denver": "admin", "chicago": "staff", "washington": "basic" }
]
},
{ ... }
]
これで「location_roles」という1つのフィールドがありますが、その中に「構造」が含まれています。明らかにSolrで他のフィールドを直接検索して、その後手動で必要なレコードをフィルタリングすることができますが、Solrに対して、私がデンバーで管理者であるユーザーのみに関心があることを伝えるためには、インデックスをどのように構造化すればよいでしょうか?
インデックスを反転させて以下のように利用することができると思われるかもしれませんが:
{
"admin": ["denver"],
"staff": ["chicago"],
"basic": ["washington"]
}
しかし、これはできません。「role」は単なるユーザーメタデータのプロキシであり、時間の経過とともに成長する可能性があり、さまざまな可能な値の範囲が広いため、インデックスを単純に反転させることはできません。
よろしくお願いします。
-chris
トピックへ返信するには、ログインが必要です。