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. Он будет найден в текстовом поле (которое состоит из копий других полей).

Другие вопросы по тегам