2012-03-16 5 views
1

Я использую Solr 3.5.0 с примером сервера под jetty-6.1-SNAPSHOT. Я начал с schema.xml по умолчанию, убраны по умолчанию <field> определений, а также указан моему собственные, в том числе следующее:Solr: ошибка «отсутствует требуемое поле», когда поле отсутствует?

<field name="content" type="text_general" indexed="false" stored="false" required="true" />** 
<field name="title" type="text_general" indexed="false" stored="true" required="true" /> 
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

Я индексное значение ЛЖИ для content поля, потому что я пытаюсь использовать это поле в определении copyField позже в схеме. И я сохранил set false, потому что мне не нужно видеть это поле content в результатах запроса.

Позже в схеме, я эти copyFields определены:

<copyField source="title" dest="text"/> 
<copyField source="content" dest="text"/> 

А вот пример моих данных:

<add> 
    <doc> 
     <field name="id">2-29-56</field> 
     <field name="title">This is a test</field> 
     <field name="content">This is some content</field> 
    </doc> 
</add> 

я запускаю пример Solr сервер с этой схемой с помощью:

C:\solr\example>java -jar start.jar 

Затем я попытаюсь отправить этот образец документа на мой сервер Solr:

C:\solr\example\exampledocs>java -jar post.jar test.xml 

Это то, что я получаю обратно:

SimplePostTool: version 1.4 
SimplePostTool: POSTing files to http://localhost:8983/solr/update.. 
SimplePostTool: POSTing file test.xml 
SimplePostTool: FATAL: Solr returned an error #400 [doc=2-29-56] missing required field: content 

Я пробовал много разных вещей, но если я изменить схему таким образом, что индексированный = «истина» для определения content поля, он работает. Или, если я верну его обратно в false и установил сохраненный = "true", то он также будет работать. Он всегда терпит неудачу, если индексированные и сохраненные установлены равными false.

Это могло бы иметь смысл, если бы я не определял экземпляр экземпляра, который использует поле содержимого. Комментарии образец схемы даже состояние:

«за лучший размер индекса и поиска производительности, установить„индекс“ложной для всех общих текстовых полей, используйте copyField, чтобы скопировать их в Catchall„текстового поля“, и используйте это для поиска ».

Итак, каков правильный способ сделать это, самый эффективный способ?

ответ

4

Обязательное поле должно быть помечено как индексированное или сохраненное.
Вы можете удалить требуемый атрибут для обоих полей и проиндексировать и сохранить как false.

Поскольку текстовое поле доступно только для поиска, вы можете иметь тип поля как нормальную строку без какого-либо анализа для других полей.

+0

Имеет смысл, спасибо! –

Смежные вопросы