Как SOLR Cell добавляет содержимое документа?

В SOLR есть модуль Cell. Он использует Tika для извлечения содержимого из документов и индексации его с помощью SOLR.

Из источников на https://github.com/apache/lucene-solr/tree/master/solr/contrib/extraction, я пришел к выводу, что Cell помещает необработанный извлеченный текст текстового документа в поле под названием «content». Поле индексируется SOLR, но не сохраняется. Когда вы запрашиваете документы, "содержание" не появляется.

У моего экземпляра SOLR нет схемы (я оставил схему по умолчанию).

Я пытаюсь реализовать подобное поведение, используя значение по умолчанию UpdateRequestHandler (POST to /solr/corename/update). Запрос POST идет:

<add commitWithin="60000">
    <doc>
        <field name="content">lorem ipsum</field>
        <field name="id">123456</field>
        <field name="someotherfield_i">17</field>
    </doc>
</add>

Если документы добавлены таким образом, поле content индексируется и сохраняется. Он присутствует в результатах запроса. Я не хочу, чтобы это было; это пустая трата места.

Что мне не хватает в способе добавления документов в Cell?


person Seva Alekseyev    schedule 31.10.2016    source источник


Ответы (2)


Если вы не хотите, чтобы в вашем поле сохранялось содержимое, вы должны установить для поля значение stored = "false".

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

Вы можете сделать это, введя replace-field команду:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
  "name":"content",
  "type":"text",
  "stored":false }
}' http://localhost:8983/solr/collection/schema

Вы можете просмотреть определенные поля, отправив запрос на /collection/schema/fields.

person MatsLindh    schedule 31.10.2016
comment
Я сделал запрос. Поле content есть, но нет stored=false. Есть еще одно поле с именем _text_, в котором есть stored=false. Однако я не смог найти никаких ссылок на _text_ в источниках Cell ... - person Seva Alekseyev; 31.10.2016

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

Правило вызывается следующей строкой в ​​SolrContentHandler.addField():

String name = findMappedName(fname);

В объекте params есть правило, согласно которому fmap.content следует рассматривать как _text_. Он исходит из corename\conf\solrconfig.xml, где по умолчанию есть следующий фрагмент:

<requestHandler name="/update/extract"
              startup="lazy"
              class="solr.extraction.ExtractingRequestHandler" >
  <lst name="defaults">
    <str name="lowernames">true</str>
    <str name="fmap.meta">ignored_</str>
    <str name="fmap.content">_text_</str> <!-- This one! -->
  </lst>
</requestHandler>

Между тем, в corename \ conf \ managed_schema есть строчка:

<field name="_text_" type="text_general" multiValued="true" indexed="true" stored="false"/>

Вот и вся история.

person Seva Alekseyev    schedule 31.10.2016