2010-09-10 4 views
3

J'essaie de faire fonctionner Apache Solr dans mon environnement zc.buildout.Problème d'ajout à l'index solr de Django en utilisant zc.buildout

J'ai défini un modèle simple:

class NewsItem(models.Model): 
    title = models.CharField(blank=False, max_length=255, help_text=u"Title of this news item") 
    slug = models.SlugField(blank=False, help_text=u"Slug will be automatically generated from the title") 
    article = models.TextField(help_text=u"The body text of this news item") 
    created_on = models.DateTimeField(auto_now_add = True) 
    updated_on = models.DateTimeField(auto_now = True) 
    published = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.title 

search_index.py:

import datetime 
from haystack.indexes import * 
from haystack import site 
from appname.models import * 


class NewsItemIndex(RealTimeSearchIndex): 
    text = CharField(document=True, use_template=True) 

    def get_queryset(self): 
     """Used when the entire index for model is updated.""" 
     return NewsItem.objects.all() 


site.register(NewsItem, NewsItemIndex) 

Et search_sites.py définit:

import haystack 
haystack.autodiscover() 

Le fichier de paramètres contient:

HAYSTACK_SITECONF = 'appname.search_sites' 
HAYSTACK_SEARCH_ENGINE = 'solr' 
HAYSTACK_SOLR_URL = 'http://127.0.0.1:8983/solr' 
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 30 
HAYSTACK_INCLUDE_SPELLING = True 

'botte de foin est listé dans INSTALLED_APPS, pysolr est répertorié dans la liste install_requires »dans setup.py (offerts par buildout)

Mon buildout.cfg contient solr-files, solr, solr-conf et supervisor. J'ai ajouté ${buildout:directory}/solr-conf aux chemins d'accès [mkdir].

Le superviseur et sections Solr en regard buildout.cfg comme ceci:

[supervisor] 
recipe = collective.recipe.supervisor 
port = localhost:9001 
user = admin 
password = admin 
plugins = 
    superlance 

# solr security settings: see 
# http://docs.codehaus.org/display/JETTY/Connectors+slow+to+startup 
programs = 
    10 solr  (startsecs=10) java [-Djava.security.egd=file:/dev/urandom -jar start.jar] ${buildout:parts-directory}/solr true 

eventlisteners = 
    SolrHttpOk TICK_60 ${buildout:bin-directory}/httpok [-p solr -t 20 http://localhost:8983/solr/] 


[solr-files] 
recipe = hexagonit.recipe.download 
url = ftp://mir1.ovh.net/ftp.apache.org/dist/lucene/solr/1.3.0/apache-solr-1.3.0.tgz 
md5sum = 23774b077598c6440d69016fed5cc810 
strip-top-level-dir = true 

[solr] 
recipe = collective.recipe.solrinstance 
solr-location = ${buildout:parts-directory}/solr-files 
host = localhost 
port = 8983 

unique-key = uniqueID 
default-search-field = text 

index = 
    name:uniqueID type:string indexed:true stored:true required:true 
    name:text type:string indexed:true stored:true required:false omitnorms:false multivalued:true 

[solr-conf] 
recipe = iw.recipe.cmd 
on_install = true 
on_update = true 
cmds = 
    cp -v ${buildout:directory}/solr-conf/jetty.xml ${solr:jetty-destination} 
    cp -v ${buildout:directory}/solr-conf/schema.xml ${solr:schema-destination} 
    cp -v ${buildout:directory}/solr-conf/stopwords_fr.txt ${solr:schema-destination} 

[solr-rebuild] 
recipe = iw.recipe.cmd 
on_install = true 
on_update = true 

# since solr is not started by solr-instance but supervisord, solr-instance has 
# no pid file and thinks that solr is down. Thus we must run it with 
# solr-instance to be able to "solr-instance purge" 
cmds = 
    ${buildout:bin-directory}/supervisorctl stop solr 
    cp -v ${buildout:directory}/solr-conf/schema.xml ${solr:schema-destination} 
    ${buildout:bin-directory}/solr-instance start 
    COUNT=15; echo "Waiting $COUNT s"; sleep $COUNT 
    ${buildout:bin-directory}/solr-instance purge 
    time ${buildout:bin-directory}/${django:control-script} rebuild_index 
    ${buildout:bin-directory}/solr-instance stop 
    ${buildout:bin-directory}/supervisorctl start solr 

Quand je lance $ bin/buildout install solr-rebuild, je reçois la sortie suivante:

`/appname/solr-conf/schema.xml' -> `/appname/parts/solr/solr/conf/schema.xml' 
Solr started with pid 16023 
Waiting 15 s 
SimplePostTool: version 1.2 
SimplePostTool: WARNING: Make sure your XML documents are encoded in UTF-8, other encodings are not currently supported 
SimplePostTool: POSTing args to http://localhost:8983/solr/update.. 
SimplePostTool: COMMITting Solr index changes.. 

WARNING: This will irreparably remove EVERYTHING from your search index. 
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command. 
Are you sure you wish to continue? [y/N] y 

Removing all documents from your index because you said so. 
All documents removed. 
Indexing 1 news items. 
Failed to add documents to Solr: [Reason: ERROR:unknown field 'django_ct'] 
0.32user 0.05system 0:02.82elapsed 13%CPU (0avgtext+0avgdata 57872maxresident)k 
160inputs+8outputs (3major+4257minor)pagefaults 0swaps 
Solr stopped successfully. 

De même, en cours d'exécution ou $ bin/django rebuild_index$ bin/buildout update_index se plaint 'django_ct':

Failed to add documents to Solr: [Reason: ERROR:unknown field 'django_ct']

(une chose que je vais essayer est mise à jour solr à la dernière version .. fera rapport si qui le fait ..)

Je ne sais pas où regarder à côté .. Recherche Google, les groupes et stackoverflow ne m'a pas dépassé ce point. Merci d'avance!

Répondre

1

OK, problème résolu. Mise à jour à Solr 1.4.1 (et, étrangement, redémarrage après cela) a fait l'affaire.

Questions connexes