CreativeMinds
CreativeMinds

Reputation: 343

How to create solr document with String type using solarium query

I' creating solr document via solarium plugin in php.

But the all document is stored text_general data type except id field. text_general is the default datatype in solr system.

My doubt is why id field is only to stored string type as default.

And If any possible to add document with string type using solarium plugin.

My code part is here,

        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();
        }

The result document for the above code is here,

{
  "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}]
  }}

Upvotes: 0

Views: 808

Answers (1)

MatsLindh
MatsLindh

Reputation: 52882

This depends on the field type defined in the schema for your Solr installation. It does not have anything to do with how you're sending data through Solarium.

In the schemaless mode, the id field is always set as a string, since a unique field can't be tokenized (well, it can, but it'll give weird, non-obvious errors).

In your case i'd suggest defining the price field as an integer/long field (if it's integers all the way) and the name field as a string field. Be aware that string fields only generate hits on exact matches, so in your case you'd have to search for value124 with exact casing to get a hit.

You can also adjust the multiValued property of the field when you define the fields explicitly. That way you get only the string back in the JSON structure instead of an array containing the string.

Upvotes: 0

Related Questions