Поля в ответе apache solr многозначны, когда они должны быть единичными

У меня проблема с Apache Solr, когда я получаю поля, завернутые в списки в ответах JSON, но они должны быть единичными. Вот отрывок из schema.xml, два примера полей, которые вызывают у меня проблемы: django_ct а также django_id:

  <fields>
    <!-- general -->
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/>
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/>

Вот пример того, как данные публикуются в Solr:

<doc>
    <field name="id">search.productcategory.3</field>
    <field name="gender">M</field>
    <field name="name">OBQYHSOQLWOUEHRMPSDI</field>
    <field name="text">M\nOBQYHSOQLWOUEHRMPSDI</field>
    <field name="django_id">3</field>
    <field name="django_ct">search.productcategory</field>
</doc>

И вот пример файла, хранящегося в solr:

  "response": {
    "numFound": 1,
    "start": 0,
    "docs": [
      {
        "django_ct": [
          "search.productcategory"
        ],
        "name": [
          "Example"
        ],
        "text": [
          "Male\nExample"
        ],
        "id": "search.productcategory.2",
        "gender": [
          "Male"
        ],
        "django_id": [
          2
        ],
        "_version_": 1502081283634757600
      }
    ]
  }

Что заставляет эти поля быть обернутыми в списки? В схеме multiValuedатрибут для этих полей имеет значение false. Помимо создания ядра и замены schema.xml, все остальное прямо из коробки. Я обращаюсь к Solr с помощью Haystack (плагин Django), код ожидает получения единичных значений для этих полей, но полностью нарушается этим. Похоже, проблема связана с тем, как настроен Solr.

Изменить: Вот полное содержимое solr.log, все это было зарегистрировано после запуска сервера, при выполнении нескольких примеров запросов не было вывода:

INFO  - 2015-05-27 08:38:12.563; [   ] org.eclipse.jetty.server.Server; jetty-8.1.10.v20130312
INFO  - 2015-05-27 08:38:12.586; [   ] org.eclipse.jetty.deploy.providers.ScanningAppProvider; Deployment monitor /Users/sampeka/solr-5.1.0/server/contexts at interval 0
INFO  - 2015-05-27 08:38:12.593; [   ] org.eclipse.jetty.deploy.DeploymentManager; Deployable added: /Users/sampeka/solr-5.1.0/server/contexts/solr-jetty-context.xml
INFO  - 2015-05-27 08:38:13.629; [   ] org.eclipse.jetty.webapp.StandardDescriptorProcessor; NO JSP Support for /solr, did not find org.apache.jasper.servlet.JspServlet
INFO  - 2015-05-27 08:38:13.682; [   ] org.apache.solr.servlet.SolrDispatchFilter; SolrDispatchFilter.init()WebAppClassLoader=1121453612@42d8062c

1 ответ

Решение

Добрался до корня проблемы. Проблема заключалась в том, что solrconfig.xml не был настроен правильно. По умолчанию schemafactory класс установлен в ManagedIndexSchemaFactory который отменяет использование schema.xml, Изменяя schemaFactory к классу ClassicIndexSchemaFactory это заставляет использовать schema.xml и делает схему неизменной при вызовах API.

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