Solr indexing issue with solrpy
Question: Just started learning solr. I am trying to use solrpy as a client. My python
code is:

    
    
    import solr
    
    # create a connection to a solr server
    s = solr.SolrConnection('http://localhost:8983/solr')
    
    # add a document to the index
    doc = dict(
        id='testid123',
        title='Lucene in Action',
        author=['Erik Hatcher', 'Otis Gospodneti'],
        )
    s.add(doc, commit=True)
    
    # do a search
    response = s.query('title:lucene')
    for hit in response.results:
        print hit['title']
    

This is from the example given [here](https://pypi.python.org/pypi/solrpy/)

My solr schema.xml is the default schema that comes with solr distribution. I
have not made any changes to that. It has a uniqueKey field as "id".

    
    
    <uniqueKey>id</uniqueKey>
    

And it is of string type

    
    
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
    

Still when I run my code, on my client side I get error:

    
    
    Traceback (most recent call last):
      File "/Users/user1/Documents/workspace/PyDelight/src/Test.py", line 12, in <module>
        s.add(doc, commit=True)
      File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 678, in add
        return Solr.add_many(self, [fields], commit=_commit)
      File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 326, in wrapper
        return self._update(content, query)
      File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 550, in _update
        rsp = self._post(selector, request, self.xmlheaders)
      File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 639, in _post
        return check_response_status(self.conn.getresponse())
      File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 1097, in check_response_status
        raise ex
    solr.core.SolrException: HTTP code=400, reason=Bad Request
    

And on the solr trace side I get error:

    
    
    843169 [qtp1151734776-20] INFO  org.apache.solr.update.processor.LogUpdateProcessor  ? [collection1] webapp=/solr path=/update params={commit=true} {} 0 0
    843170 [qtp1151734776-20] ERROR org.apache.solr.core.SolrCore  ? org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id
    

schema.xml file is in solr-4.4.0/example/solr/collection1/conf

And I am running solr by simply running start.jar in example directory.

Any idea where I am going wrong?


Answer: i have not used solrpy much (and haven't installed it yet) but from the
initial example, it looks like it wants to be called with attribute=value
pairs instead of a dictionary. (i know the example you posted is right from
the online 0.9.2 documentation! but the current source on github has this in
the comments):

    
    
    add(**params)
            Add a document.  Pass in all document fields as
            keyword parameters:
                add(id='foo', notes='bar')
            You must "commit" for the addition to be saved.
    

So try this:

    
    
    s.add(commit=True, **doc)     
    

and it will probably work. You may need to pull out the commit and do it
separately, i don't know.

i am not a solr expert, and just played around with it a little bit, but also
i had better luck using [sunburnt](https://github.com/tow/sunburnt "sunburnt")
than solrpy. worth a shot, maybe.

edit: github pointer to that file is here:
<http://code.google.com/p/solrpy/source/browse/solr/core.py>

