我的文档中有以下结构:
文档:1
{
"123e4567-e89b-12d3-a456-426655440000": {
"order_id": "100",
"qty": 27
},
"321e7654-e89b-21d3-a654-426655441111": {
"order_id": "234",
"qty": 12
}
}
文档:2
{
"123e4567-e89b-12d3-a456-426655440000": {
"order_id": "101",
"qty": 27
},
"789ab763-a56b-87bb-a654-873655442222": {
"order_id": "345",
"qty": 23
}
}
其中uuid
文档根代表客户标识符,嵌套对象代表客户下的订单。
我关心的唯一查询是通过客户标识符和订单标识符的单个字段进行简单查询,以查找他们的订单:
customer_idx?q=*:*&fq=123e4567-e89b-12d3-a456-426655440000.order_id:*&sort=123e4567-e89b-12d3-a456-426655440000.order_id asc&rows=3
或特定的:
customer_idx?q=*:*&fq=123e4567-e89b-12d3-a456-426655440000.order_id:101&rows=1
问题。可以定义dynamicField
客户标识符吗?从性能的角度。在这种情况下,我最终会得到特定模式的数十万或数百万个字段。
<dynamicField name="*.order_id" type="string" indexed="true" stored="false" multiValued="false" />
我知道如果我在单个查询中使用许多索引字段会对性能和内存消耗产生影响,因为 Lucene 会为我查询或排序的每个字段创建一个包含每个文档的一个项目的数组。但是,如果有数十万或数百万个字段,我会同时查询其中一个,这会不会有问题?
如果没有,有什么更好的解决方案?
谢谢。
更新:更新的查询示例。添加了过滤器、排序和限制。以防万一。