親フィールドで子ドキュメントの一致を拡張
(The bot translated the original post https://lists.apache.org/thread/15vsrjxldz1qbg3wtl10wmodywkrk5pb into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
皆さんこんにちは、
[
{
"ID": "1",
"title": "街の環境音の録音",
"tags": ['都市', '環境', '犬', '鳥'],
"duration": 1:21,
"events": [{
"ID": "1/events#0",
"timestamp": 0:23,
"event_description": "犬の鳴き声"
},{
"ID": "1/events#1",
"timestamp": 0:47,
"event_description": "鳥のさえずり"
},{
"ID": "1/events#2",
"timestamp": 1:05,
"event_description": "犬の鳴き声"
},
...
]
},
...
]
私が実現したいのは、子ドキュメントにマッチするクエリを実行し、スコアに基づいてそれらをソートすることですが、親ドキュメントのフィールドに基づいてファセットを行いたいということです。例えば、「犬の鳴き声」イベントが発生するすべてのドキュメントを取得したい(例のように、1つのドキュメントに2つの該当イベントがあれば、2回返される)、その際、子ドキュメントのスコアでソートしたいのですが、親ドキュメントの「duration」フィールドのようなファセットデータを含めたいのです。
1つの解決策は、すべての親ドキュメントのフィールドを、インデックス時に各子ドキュメントに複製することです。これで機能しますが、インデックス内に多くの冗長な情報が生成されてしまいます。
私が最適だと考えるのは、子ドキュメントのフィールドを拡張し、クエリ時に親のフィールドを含める方法です。たとえば、フィールドリストにfl=timestamp,event_description,__parent__.duration
のように指定できれば理想的です。それは可能でしょうか?
他にもいくつかのアプローチを試しましたが、親ドキュメントクエリパーサーのような方法では、特定の条件に一致する子ドキュメントの親ドキュメントを返すことはできるものの、どの子ドキュメントがクエリに一致したのかがわからないという問題があります。また、スコアが親ドキュメントに伝播しないため、期待通りにソートされません。
以上です。サポートに感謝します!
よろしくお願いします、
Frederic
トピックへ返信するには、ログインが必要です。