Une instance de Solr s'exécute sur ma machine Ubuntu à l'aide du serveur Jetty par défaut fourni avec le téléchargement de Solr. Chaque fois que je commence à utiliser Solr
Java -jar start.jar
Le serveur démarre correctement mais il y a toujours une exception:
INFO: SolrDispatchFilter.init() done
Apr 12, 2012 2:01:56 PM org.Apache.solr.common.SolrException log
SEVERE: org.Apache.solr.common.SolrException: undefined field text
Comme je l'ai dit cependant, le serveur va toujours démarrer et je peux voir l'interface d'administration de Solr. J'ai défini mon schéma comme suit.
<fields>
<field name="id" type="string" indexed="true" stored="true" />
<field name="phraseID" type="int" indexed="true" stored="true" />
<field name="translation" type="string" indexed="true" stored="true" />
</fields>
<uniqueKey>id</uniqueKey>
J'ai également pu effectuer une mise à jour JSON - j'ai soumis un exemple de tableau de données accepté. Jusqu'ici tout va bien.
Lorsque j'essaie d'exécuter une requête:
http://localhost:8983/solr/select/?q=*:*&version=2.2&start=0&rows=10&indent=on
Il renvoie correctement toutes les données que j'ai soumises précédemment dans mon échantillon.
Cependant, au moment où j'essaie d'interroger à l'aide de texte, je reçois un HTTP ERROR 404.
http://localhost:8983/solr/select/?q=fruit&version=2.2&start=0&rows=10&indent=on
--- returns ---
HTTP ERROR 400
Problem accessing /solr/select/. Reason:
undefined field text
Powered by Jetty://
La configuration par défaut de solr a défini des gestionnaires de demandes dont les valeurs par défaut correspondent au schéma par défaut inclus dans l'archive solr.
Vérifiez les gestionnaires de requêtes définis dans solrconfig et vous constaterez que <str name="qf">
et d'autres valeurs de configuration incluent des champs que vous n'avez pas définis dans le schéma.
Vérifiez également dans votre fichier schema.xml que le champ de recherche par défaut n’est pas défini sur texte comme ceci: <defaultSearchField>text</defaultSearchField>
J'ai eu le même problème. S'il n'y a pas de <defaultSearchField>
dans le fichier solrconfig.xml
, cherchez le gestionnaire /select
.
Dans ce que vous trouveriez quelque chose comme ça
<str name="df">text</str>
C'est le coupable. df
signifie le champ par défaut et, par défaut, et agréablement, assez bêtement, est défini sur un champ appelé text
que beaucoup pourraient ne pas avoir.
Supprimez-le et remplacez-le par ce qui sera votre champ de recherche par défaut.
Le champ de texte est composé de copies d'autres champs, comme spécifié dans le fichier schema.xml par défaut (lors de l'insertion d'un nouveau document).
Ainsi, lorsque nous avons le "texte" df dans le fichier solrconfig.xml, nous effectuons une recherche sans spécifier le champ de la page d'administration solr, tel que: video. Il sera recherché dans le champ de texte (composé de copies d’un autre champ).
J'ai le même problème qui apparaît soit sur une réponse 404 parfois comme décrit ci-dessus, soit à titre d'exception dans la trace de la pile de la jetée:
SEVERE: org.Apache.solr.common.SolrException: texte de champ non défini
at org.Apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.Java:1330) at org.Apache.solr.schema.IndexSchema.getFieldType(IndexSchema.Java:1282) at org.Apache.solr.search.SolrQueryParser.getWildcardQuery(SolrQueryParser.Java:234) at org.Apache.lucene.queryParser.QueryParser.Term(QueryParser.Java:1414)
J'ai vérifié le champ defaultSearchField qui est défini sur "contenu" (ce qui me semble correct)
Edit: j'ai dans mon schema.xml la définition suivante pour le texte de type (aucun problème ne s'y trouve)
<fieldType name="text" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0"
splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"
protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
Ce n'est peut-être pas toujours le cas, mais lorsque j'ai eu un problème similaire, il s'est avéré que le redémarrage du serveur Solr à l'aide de restart command ne suffisait pas. Arrêter explicitement le serveur à l’aide de la commande stop puis le démarrer à l’aide de la commande start a vraiment fait l’essentiel. Je n'ai pas eu besoin de modifier un fichier.
P.S. Mon problème était avec seulement/clustering n'étant pas accessible pour mon noyau Solr.