我遇到了Apache Solr的问题,我在JSON响应中接收包含在列表中的字段,但它们应该是单数的。这是schema.xml的一个exerpt,给我一个问题的两个示例字段是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之外,其他所有内容都是开箱即用的。我使用Haystack(一个Django插件)访问Solr,代码期望接收这些字段的单个值,但完全被它破坏了。追溯问题似乎是由于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
答案 0 :(得分:9)
找到了问题的根源。问题是solrconfig.xml
没有正确配置。默认情况下,schemafactory
类设置为ManagedIndexSchemaFactory
,它会覆盖schema.xml
的使用。通过将schemaFactory
更改为类ClassicIndexSchemaFactory
,它会强制使用schema.xml
,并通过API调用使模式不可变。