Solr /admin/luke请求有时会返回空值

ikfrs5lh  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(195)

我试图从Solr获取一些元数据(文档计数和最后修改日期),并找到了/solr/<core>/admin/luke端点来完成此操作。
然而,我的请求有时会返回空值而不是值。我可以通过SolrJ和curl重新生成它:
/solr/core_name/管理员/luke -s| jq '.index.上次修改时间'
“2019年6月4日星期一上午19:59:45.617”
/solr/core_name/管理员/luke -s| jq '.index.上次修改时间'
零值
如果没有jq,则结果为:

{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "index":{
    "numDocs":11,
    "maxDoc":11,
    "deletedDocs":0,
    "indexHeapUsageBytes":-1,
    "version":6,
    "segmentCount":1,
    "current":true,
    "hasDeletions":false,
    "directory":"org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(MMapDirectory@ ... lockFactory=org.apache.lucene.store.NativeFSLockFactory@2846d2cf; maxCacheMB=48.0 maxMergeSizeMB=4.0)",
    "segmentsFile":"segments_1",
    "segmentsFileSizeInBytes":-1,
    "userData":{
      "commitTimeMSec":"1559730066881",
      "commitCommandVer":"1635495514608762880"},
    "lastModified":"2019-06-05T10:21:06.881Z"},
  "fields":{ .... },
  "info":{ .... }
}

或:

{
  "responseHeader":{
    "status":0,
    "QTime":2},
  "index":{
    "numDocs":11,
    "maxDoc":11,
    "deletedDocs":0,
    "indexHeapUsageBytes":-1,
    "version":4,
    "segmentCount":1,
    "current":false,
    "hasDeletions":false,
    "directory":"org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(MMapDirectory@ .... lockFactory=org.apache.lucene.store.NativeFSLockFactory@1e10c435; maxCacheMB=48.0 maxMergeSizeMB=4.0)",
    "segmentsFile":"segments_1",
    "segmentsFileSizeInBytes":-1,
    "userData":{}},
  "fields":{ .... },
  "info":{ .... }
}

我省略了index.directoryfieldsinfo的一部分。区别在于versioncurrentuserDatalastModified,其他的看起来都一样。
我在云模式下使用Solr 7.5。我的集合在多个碎片上,副本数为2(或更多)。我尝试在请求中添加?numTerms=50,但没有帮助。
我能做些什么来确保总是收到正确的答复吗?

oxf4rvwz

oxf4rvwz1#

.index.lastModified是由Luke请求处理程序从.index.userData.commitTimeMSec计算出来的。这就是为什么最后三位数总是相同的原因。
如果你的内核还没有任何提交,.index.userData是空的,Luke不会把.index.lastModified添加到响应中,这就是你在第二个请求中看到的。
来自LukeRequestHandler.java:

String s = userData.get(SolrIndexWriter.COMMIT_TIME_MSEC_KEY);
if (s != null) {
  indexInfo.add("lastModified", new Date(Long.parseLong(s)));
}

相关问题