实时获取
为了使索引更新可见(可搜索),必须进行某种提交以重新打开搜索器以获得索引的新的时间点视图。
实时获取功能允许检索(按unique-key
)任何文档的最新版本,而无需重新打开搜索器的相关成本。这主要在将 Solr 用作 NoSQL 数据存储而不是仅用作搜索索引时有用。
实时获取依赖于更新日志功能,该功能默认启用,可以在solrconfig.xml
中配置。
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
实时获取请求可以使用/get
处理程序执行,该处理程序在 Solr 中隐式存在 - 请参阅隐式请求处理程序 - 它等效于以下配置
<requestHandler name="/get" class="solr.RealTimeGetHandler">
<lst name="defaults">
<str name="omitHeader">true</str>
</lst>
</requestHandler>
例如,如果您使用bin/solr -e techproducts
示例命令启动 Solr,那么您可以索引一个新文档,而无需提交它,如下所示
curl 'http://localhost:8983/solr/techproducts/update/json?commitWithin=10000000' \
-H 'Content-type:application/json' -d '[{"id":"mydoc","name":"realtime-get test!"}]'
如果您搜索此文档,它应该还没有找到
http://localhost:8983/solr/techproducts/query?q=id:mydoc
{"response":
{"numFound":0,"start":0,"docs":[]}
}
但是,如果您使用/get
处公开的实时获取处理程序,则可以检索文档
V1 API
http://localhost:8983/solr/techproducts/get?id=mydoc
{"doc": {
"id": "mydoc",
"name": "realtime-get test!",
"_version_": 1487137811571146752
}
}
V2 API
http://localhost:8983/api/collections/techproducts/get?id=mydoc
{"doc": {
"id": "mydoc",
"name": "realtime-get test!",
"_version_": 1487137811571146752
}
}
您还可以通过ids
参数和逗号分隔的 ID 列表,或使用多个id
参数,一次指定多个文档。如果您指定多个 ID,或使用ids
参数,则响应将模仿正常的查询响应,以便现有客户端更容易解析。
例如
V1 API
http://localhost:8983/solr/techproducts/get?ids=mydoc,IW-02
http://localhost:8983/solr/techproducts/get?id=mydoc&id=IW-02
{"response":
{"numFound":2,"start":0,"docs":
[ { "id":"mydoc",
"name":"realtime-get test!",
"_version_":1487137811571146752},
{
"id":"IW-02",
"name":"iPod & iPod Mini USB 2.0 Cable"
}
]
}
}
V2 API
http://localhost:8983/api/collections/techproducts/get?ids=mydoc,IW-02
http://localhost:8983/api/collections/techproducts/get?id=mydoc&id=IW-02
{"response":
{"numFound":2,"start":0,"docs":
[ { "id":"mydoc",
"name":"realtime-get test!",
"_version_":1487137811571146752},
{
"id":"IW-02",
"name":"iPod & iPod Mini USB 2.0 Cable"
}
]
}
}
实时获取请求也可以与过滤器查询结合使用,过滤器查询使用fq
参数指定。
V1 API
http://localhost:8983/solr/techproducts/get?id=mydoc&id=IW-02&fq=name:realtime-get
{"response":
{"numFound":1,"start":0,"docs":
[ { "id":"mydoc",
"name":"realtime-get test!",
"_version_":1487137811571146752}
]
}
}
V2 API
http://localhost:8983/api/collections/techproducts/get?id=mydoc&id=IW-02&fq=name:realtime-get
{"response":
{"numFound":1,"start":0,"docs":
[ { "id":"mydoc",
"name":"realtime-get test!",
"_version_":1487137811571146752}
]
}
}
如果您使用 SolrCloud,不要禁用 类似地,副本恢复也将始终从领导者获取完整的索引,因为在没有此处理程序的情况下,部分同步将不可行。 |