Solr: ошибка «отсутствует обязательное поле», когда поле не пропущено? - PullRequest
1 голос
/ 17 марта 2012

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

<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"/>

У меня установлено значение false для поля content, потому что яя пытаюсь использовать это поле в определении copyField позже в схеме.И я сохранил значение 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

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

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

"для наилучшего размера индекса и производительности поиска, установите" index "в false для всех общих текстовых полей, используйте copyField, чтобы скопировать их в универсальное" текстовое "поле,и используйте это для поиска. "

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

1 Ответ

5 голосов
/ 17 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...