rishi
rishi

Reputation: 2554

Solr indexing issue with solrpy

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

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?

Upvotes: 2

Views: 3128

Answers (2)

Corley Brigman
Corley Brigman

Reputation: 12371

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 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

Upvotes: 3

Ethan Furman
Ethan Furman

Reputation: 69021

I haven't used Solr so I could be totally wrong, but in the example you link to the id is an int. Try making yours an int as well, changing your id from 'testid123' to something else like 123 and see what happens.

Upvotes: 0

Related Questions