ブロックの子要素を使用したfacetドメインの変更が期待通りに動作しない

トピック作成者:ks-solruserml-bot (2024/08/15 10:24 投稿)
4
CloseClose

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

ドキュメントにネストされたドキュメントがインデックスされており、次のような構造になっています:

{
    'id': 1,
    'creation_date': '2023-02-09T07:18:59Z',
    'update_date': '2023-05-03T14:37:08Z',
    'dictionary': {
        'id': 'DIC1',
        'lang_ids': [2, 3]
    },
    'contexts': [],
    'definitions': [
        {
            'id': 'DFN1',
            'lang_id': 2,
            'definition': '<p>una definición</p>'
        }
    ],
    'denominations': [
        {
            'id': 'DNM1',
            'lang_id': 2,
            'denomination': 'Casa',
            'feminine_form': 'no procede',
            'masculine_form': 'no procede'
        }
    ],
    'illustrations': [],
    'notes': [],
    'observations': [],
    'videos': []
}

このドキュメントを見つけて、dictionary サブドキュメント内の lang_ids をリストするファセットを作成したいと考えています。

以下のクエリを試しました:
http://0.0.0.0:8983/solr/index_cards/select?facet=true&indent=true&json.facet=%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22working_language_ids%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22domain%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22blockChildren%22%3A%22id%3ADIC*%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22terms%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22field%22%3A%20%22lang_ids%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22limit%22%3A%20-1%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D&q.op=OR&q=id%3A1&useParams=

q パラメータは id:1 です。

json.facet パラメータは以下の通りです:

{
    "working_language_ids": {
        "domain": {
           "blockChildren": "id:DIC*"
       },
        "type": "terms",
        "field": "lang_ids",
        "limit": -1
    }
}

結果として親ドキュメントは期待通りに返されますが、working_language_ids ファセットは空です:

"facets": {
    "count": 1,
    "working_language_ids": {
      "buckets": []
    }
}

直接 id:DIC* でクエリを実行し、辞書のサブドキュメントを取得すると、ファセットの「domain」セクションを省略した場合には期待通りの結果が返されます。したがって、問題は lang_ids 自体のインデックスやファセット定義にあるのではなく、blockChildren の使用にある可能性が高いです。

何かアドバイスがあればお願いします。ありがとうございます。

--

IgorBlanco

返信投稿者:ks-solruserml-bot (2024/08/15 10:24 投稿)

こんにちは、Igorさん。

この特定のケースで親子ドキュメントがうまくインデックスされているかどうかはわかりませんが、リファレンスガイドで1つの詳細に気付きました…これはコレクション内のすべての親ドキュメントにのみ一致します。

おそらく、"blockChildren":"id:[0 TO 9]" とするべきでしょう。

事前に、このクエリが親ドキュメントのみと一致することを確認してください。

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

返信投稿者:ks-solruserml-bot (2024/08/15 10:24 投稿)

こんにちは、Igorさん。

あなたの提案でうまくいきましたが、まだ少し混乱しています。

blockChildren は、メインの結果ドキュメントのすべての子ドキュメントにドメインを変更することを許可すると思っていました。そして、「id:DIC*」フィルターは、IDが「DIC」で始まる子ドキュメントにドメインを制限するもので、辞書のものだけが対象になると思っていました。

しかし、あなたの提案を試してドキュメントを再読した結果、blockChildren に提供すべきなのは親ドキュメントを取得するためのクエリであることが理解できました。例えば、以下のようにしました:

"blockChildren":"-_nest_path_:*"

これでうまくいっているようです。

しかし、この方法は、辞書サブドキュメントに「lang_ids」フィールドしかないため機能しています。他のサブドキュメントにもこのフィールドが存在する場合、どのようにして新しいドメインをフィルターに合致する子ドキュメントだけに制限するのでしょうか?

どうぞよろしくお願いします。

--

IgorBlanco

返信投稿者:ks-solruserml-bot (2024/08/15 10:25 投稿)

もちろんです。「domain」の下に「filter」を適用して、特定の子タイプを制限することができます。詳細は以下のリンクをご確認ください。

JSON Faceting Domain Changes - Adding Domain Filters

追記:Solrを現代化するために、blockChainを追加するべきですね。ヒントをありがとうございました!

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

返信投稿者:ks-solruserml-bot (2024/08/15 10:25 投稿)

おお、素晴らしい、アドバイスありがとうございます。

そして、はい、jejeje、SOLRのblockChainは、自分の財布のパスワードを必死に探している人たちにとっては素晴らしいでしょうね。 :P

助けてくれてありがとう。

--

IgorBlanco

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

KandaSearch

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

投稿の削除

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