【发布时间】:2018-05-24 05:22:42
【问题描述】:
我的文档中有以下结构:
文档: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 会为我查询或排序的每个字段创建一个包含每个文档的一个项目的数组。但是如果有数十万或数百万个字段,我会同时查询其中一个,会不会有问题?
如果没有,有什么更好的解决方案?
谢谢。
UPDATE:更新的查询示例。添加了过滤器、排序和限制。以防万一。
【问题讨论】:
-
你能详细说明一下吗,像这样的查询 q=123e4567-e89b-12d3-a456-426655440000:* 你已经有很多字段了,对吧?
-
是的,现在有几十万个索引字段,Solr 的性能看起来还不错,到目前为止查询这样的速度超快。
-
我更好奇,您是如何确定要查询哪个字段(例如 uuid)的?
-
为什么会有问题?
标签: performance solr lucene solr-schema