Solr Query - ошибка HTTP 404, текст поля не определен
У меня запущен экземпляр Solr на моей машине с Ubuntu, использующий сервер Jetty по умолчанию, с которым загружается Solr. Всякий раз, когда я начинаю использовать Solr
java -jar start.jar
Сервер запускается нормально, но всегда выдается исключение:
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
Как я уже сказал, сервер все равно будет запущен, и я вижу интерфейс администратора Solr. Я определил мою схему следующим образом.
<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>
Я также смог выполнить обновление JSON - я отправил образец массива данных, который был принят. До этого момента все хорошо.
Когда я пытаюсь выполнить запрос:
http://localhost:8983/solr/select/?q=*:*&version=2.2&start=0&rows=10&indent=on
Он правильно возвращает все данные, которые я представил в моем образце ранее.
Однако в тот момент, когда я пытаюсь выполнить запрос с использованием текста, я получаю сообщение об ошибке HTTP 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://
5 ответов
Конфигурация solr по умолчанию определила некоторые обработчики запросов со значениями по умолчанию, которые соответствуют схеме по умолчанию, включенной в tar-архив solr.
Проверьте обработчики запросов, определенные в solrconfig, и вы можете обнаружить, что<str name="qf">
и другие значения конфигурации включают некоторые поля, которые вы не определили в схеме.
Также проверьте свой schema.xml, чтобы в поле поиска по умолчанию не было текста, подобного следующему: <defaultSearchField>text</defaultSearchField>
У меня такая же проблема. В случае, если нет <defaultSearchField>
в solrconfig.xml
файл, ищите /select
обработчик.
В этом вы найдете что-то вроде этого
<str name="df">text</str>
Это виновник. df
означает поле по умолчанию, и оно, по умолчанию, и, как ни странно, довольно глупо, установлено в поле с именем text
что многие могут не иметь.
Удалите его и замените тем, что будет вашим полем поиска по умолчанию.
У меня та же проблема, которая иногда появляется либо в ответе 404, как описано выше, либо в качестве исключения в трассировке стека молей:
SEVERE: org.apache.solr.common.SolrException: неопределенный текст поля
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)
Я проверил defaultSearchField, который установлен в "содержание" (что мне кажется правильным)
Изменить: у меня есть в моем schema.xml следующее определение для типа текста (не вижу проблем в этом)
<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>
Это может не всегда иметь место, но когда у меня возникла похожая проблема, оказалось, что перезапуска сервера Solr с помощью команды restart недостаточно. Явно остановив сервер командой stop, а затем запустив его командой start, все получилось. Мне не нужно редактировать любой файл.
PS Моя проблема была только в том, что кластер не был доступен для моего ядра Solr.
Текстовое поле состоит из копий других полей, как указано в файле schema.xml по умолчанию (при вставке нового документа).
Итак, когда у нас есть df "text" в solrconfig.xml, и мы выполняем поиск без указания поля на странице администрирования solr, такого как: video. Он будет найден в текстовом поле (которое состоит из копий других полей).