5个不稳定版本
0.3.2 | 2024年4月1日 |
---|---|
0.3.1 | 2023年11月7日 |
0.3.0 | 2023年9月14日 |
0.2.0 | 2023年9月6日 |
0.1.0 | 2023年8月31日 |
#146 in HTTP客户端
每月21次下载
58KB
1K SLoC
RSolr
Rust的Solr客户端。
Rsolr
提供了操作和向Solr服务器发送请求的能力,包含一些快捷操作,并支持一些分面功能和查询构建器。它使用reqwest http客户端的阻塞版本。
选择
您可以以实现了 Clone
和 Deserialize
的类型检索文档。
use serde_json::Value;
use rsolr::Client;
use rsolr::error::RSolrError;
use rsolr::solr_result::SolrResponse;
fn query_all() -> Result<SolrResponse<Value>, RSolrError> {
let result = Client::new("http://solr:8983", "collection")
.select("*:*")
.run::<Value>();
match result {
Ok(solr_result) => Ok(solr_result.expect("Request is OK, but no response; in select it's a failure on Solr side.")),
Err(e) => Err(e)
}
}
上传JSON文档
您应该使用实现了 Clone
和 Serialize
的类型。
use serde::Serialize;
use serde_json::Value;
use rsolr::Client;
#[derive(Serialize, Clone)]
struct SimpleDocument {
field: Vec<String>
}
fn upload() {
let document = SimpleDocument { field: vec!("nice".to_string(), "document".to_string()) };
Client::new("http://solr:8983", "collection")
.upload_json(document)
.run().expect("request failed.");
}
删除
use serde_json::Value;
use rsolr::Client;
fn delete() {
Client::new("http://solr:8983", "collection")
.delete("delete:query")
.run::<Value>().expect("panic, request failed.");
}
带有参数的自定义处理程序
您也可以定义任何处理程序。
use serde_json::Value;
use rsolr::Client;
use rsolr::error::RSolrError;
use rsolr::solr_result::SolrResponse;
fn more_like_this() -> Result<SolrResponse<Value>, RSolrError> {
let result = Client::new("http://solr:8983", "collection")
.request_handler("mlt")
.add_query_param("mlt.fl", "similarity_field")
.add_query_param("mlt.mintf", "4")
.add_query_param("mlt.minwl", "3")
.run::<Value>();
match result {
Ok(solr_result) => Ok(solr_result.expect("Request is OK, but no response; in select it's a failure on Solr side.")),
Err(e) => Err(e)
}
}
基于游标的分页
可以使用 solr游标 逐个获取分页结果。
use serde_json::Value;
use rsolr::Client;
use rsolr::solr_response::SolrResponse;
fn cursor_fetch_all_pages() -> Vec<SolrResponse<Value>> {
let mut responses = Vec::new();
let mut client = Client::new("http://solr:8983", "collection");
let result = client
.select("*:*")
.sort("id asc")
.cursor()
.run();
let mut cursor = result.expect("request failed").expect("no cursor");
while cursor.next::<Value>().expect("request failed").is_some() {
responses.push(cursor.get_response::<Value>().expect("parsing failed"));
}
responses
}
开发
我使用 Cargo Run Script 来设置和管理本地Solr,指定使用最新版本的Solr以保持更新。支持Solr 8+。您还需要一个 Docker。检出后,应运行
cargo run-script solr-start
cargo run-script solr-provision
现在您可以在 https://127.0.0.1:8983
上访问本地Solr。为了测试,我创建了一个没有任何schema定义的默认集合。实际上,这意味着所有值默认都是 多值。
依赖项
~6–21MB
~286K SLoC