我正在通过php中的solarium插件创建solr文档。
但是所有文档都存储text_general
字段之外的id
数据类型。 text_general
是solr系统中的默认数据类型。
我的疑问是,为什么id
字段仅将存储的字符串类型作为默认值。
如果有可能的话,可以使用solarium插件添加string
类型的文档。
我的代码部分在这里,
public function updateQuery() {
$update = $this->client2->createUpdate();
// create a new document for the data
$doc1 = $update->createDocument();
// $doc1->id = 123;
$doc1->name = 'value123';
$doc1->price = 364;
// and a second one
$doc2 = $update->createDocument();
// $doc2->id = 124;
$doc2->name = 'value124';
$doc2->price = 340;
// add the documents and a commit command to the update query
$update->addDocuments(array($doc1, $doc2));
$update->addCommit();
// this executes the query and returns the result
$result = $this->client2->update($update);
echo '<b>Update query executed</b><br/>';
echo 'Query status: ' . $result->getStatus(). '<br/>';
echo 'Query time: ' . $result->getQueryTime();
}
上面代码的结果文档在这里,
{
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"q":"*:*",
"_":"1562736411330"}},
"response":{"numFound":2,"start":0,"docs":[
{
"name":["value123"],
"price":[364],
"id":"873dfec0-4f9b-4d16-9579-a4d5be8fee85",
"_version_":1638647891775979520},
{
"name":["value124"],
"price":[340],
"id":"7228e92d-5ee6-4a09-bf12-78e24bdfa52a",
"_version_":1638647892102086656}]
}}
答案 0 :(得分:0)
这取决于您的Solr安装的字段类型defined in the schema。它与您如何通过Solarium发送数据没有任何关系。
在无模式模式下,id
字段始终设置为字符串,因为不能对唯一字段进行标记化(可以,但是可以给出奇怪的,非显而易见的错误)。
在您的情况下,我建议将price
字段定义为整数/长字段(如果一直都是整数),而将name
字段定义为字符串字段。请注意,string
字段只会在完全匹配时产生匹配,因此,在您的情况下,您必须使用完全大小写搜索value124
才能获得匹配。
您还可以在明确定义字段时调整字段的multiValued
属性。这样,您只能将字符串恢复为JSON结构,而不是包含该字符串的数组。