如何使用日光浴室查询创建String类型的Solr文档

时间:2019-07-10 05:29:07

标签: php solr solarium

我正在通过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}]
  }}

1 个答案:

答案 0 :(得分:0)

这取决于您的Solr安装的字段类型defined in the schema。它与您如何通过Solarium发送数据没有任何关系。

在无模式模式下,id字段始终设置为字符串,因为不能对唯一字段进行标记化(可以,但是可以给出奇怪的,非显而易见的错误)。

在您的情况下,我建议将price字段定义为整数/长字段(如果一直都是整数),而将name字段定义为字符串字段。请注意,string字段只会在完全匹配时产生匹配,因此,在您的情况下,您必须使用完全大小写搜索value124才能获得匹配。

您还可以在明确定义字段时调整字段的multiValued属性。这样,您只能将字符串恢复为JSON结构,而不是包含该字符串的数组。