Solr 将简单地忽略下一个导入请求,直到第一个请求结束,它不会缓存第二个请求。我可以观察到这种行为,我已经在某处读过它,但现在找不到。
事实上,我正在处理同样的问题。我尝试优化查询:
deltaImportQuery="select * from Assests where ID='${dih.delta.ID}'"
deltaQuery="select [ID] from Assests where date_created > '${dih.last_index_time}' "
我只检索了第一手的 ID 字段,而不是尝试检索预期的文档。您也可以指定您的字段而不是“*”符号。因为我使用视图,所以它不适用于我的情况
,如果我有其他解决方案,我会更新。
解决后编辑
除了上面建议的请求之外,我还改变了一个想法,将我的索引过程加快了 10 倍。我有两个嵌套的大实体。我在另一个里面使用了实体,比如
<entity name="TableA" query="select * from TableA">
<entity name="TableB" query="select * from TableB where TableB.TableA_ID='${TableA.ID}'" >
这会产生多值 tableB 字段。但是对于 TableB 的每一行,向 db 发出一个请求。我使用 with 子句和逗号分隔的字段值更改了我的视图。并解析来自 solr 字段映射的值。并将其索引到多值字段。
我的整个索引过程从几小时缩短到几分钟。下面是我的视图和 solr 映射配置。
WITH tableb_with as (SELECT * from TableB)
SELECT *,STUFF( (SELECT ',' + REPLACE( fieldb1, ',', ';') from tableb_with where tableb_with.tableA.ID = tableA.ID
for xml path(''), type).value('.', 'varchar(max)') , 1, 1, '') AS field2WithComma,
STUFF( (SELECT ',' + REPLACE( fieldb1, ',', ';') from tableb_with where tableb_with.tableA.ID = tableA.ID
for xml path(''), type).value('.', 'varchar(max)') , 1, 1, '') AS field2WithComma,
Al 花哨的连接和联合进入 tableB 中的 clouse 以及 tableA 中的很多连接。其实这个观点一共占据了20万场。
solr 映射是这样的:
<field column="field1WithComma" name="field1" splitBy=","/>
希望它可以帮助某人。