我有使用Solr的下载自带的默认Jetty服务器我的Ubuntu机器上运行的Solr的实例。 每当我使用Solr的开始
Java的罐子start.jar
服务器启动正常,但总是抛出的异常:
INFO: SolrDispatchFilter.init() done
Apr 12, 2012 2:01:56 PM org.apache.solr.common.SolrException log
SEVERE: org.apache.solr.common.SolrException: undefined field text
正如我所说,虽然,服务器仍然启动,我可以看到Solr的管理界面。 我定义我的架构如下。
<fields>
<field name="id" type="string" indexed="true" stored="true" />
<field name="phraseID" type="int" indexed="true" stored="true" />
<field name="translation" type="string" indexed="true" stored="true" />
</fields>
<uniqueKey>id</uniqueKey>
我还能够进行JSON更新 - 我提交的数据的样本阵列被接受。 到现在为止一切都很好。
当我尝试运行查询:
http://localhost:8983/solr/select/?q=*:*&version=2.2&start=0&rows=10&indent=on
它正确地返回所有我在前面的样品提交的数据。
不过,我尝试使用文本查询的那一刻,我收到一个HTTP错误404。
http://localhost:8983/solr/select/?q=fruit&version=2.2&start=0&rows=10&indent=on
--- returns ---
HTTP ERROR 400
Problem accessing /solr/select/. Reason:
undefined field text
Powered by Jetty://
默认solr的配置已经定义了一些请求处理程序相匹配包括在solr的压缩包的默认模式,默认。
检查solrconfig定义的请求处理程序,你可能会发现, <str name="qf">
和其他配置值包括你有没有在架构中定义的某些字段。
另外,检查你schema.xml中,默认搜索字段设置为文本是这样的: <defaultSearchField>text</defaultSearchField>
我有同样的问题。 在情况下,没有<defaultSearchField>
在solrconfig.xml
文件中,查找/select
处理程序。
内你会发现这样的事情
<str name="df">text</str>
这是罪魁祸首。 df
表示默认的领域,它在默认情况下,和愉快,很愚蠢,被设定为一个域名为text
其中许多可能没有。
删除并用一切是为您的默认搜索字段替换它。
我有出现无论是在高于还是如在码头堆栈跟踪的异常有时如所描述的一个404的回答相同的问题:
重度:org.apache.solr.common.SolrException:未定义的字段中的文本
at org.apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.java:1330) at org.apache.solr.schema.IndexSchema.getFieldType(IndexSchema.java:1282) at org.apache.solr.search.SolrQueryParser.getWildcardQuery(SolrQueryParser.java:234) at org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1414)
我检查其设置为“内容”的defaultSearchField(这似乎没对我来说)
编辑:我在schema.xml中的文本类型的定义如下(见这没有问题)
<fieldType name="text" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0"
splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"
protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
文本字段由另一个字段的拷贝,如在默认schema.xml中指定(插入新文档时)。
所以,当我们在solrconfig.xml中的DF“文本”,和我们做一个搜索,而不Solr管理页面上指定的领域,如:视频。 这将在文本字段中(它是由另一个领域的副本)进行查找。
这可能并非总是如此,但是当我有一个类似的问题,事实证明,重新启动使用重新启动命令并不足以Solr的服务器。 明确停止与停止命令的服务器,然后使用start命令实际上做的伎俩启动它。 我并不需要编辑的任何文件。
PS我的问题是有没有被我的Solr的核心只能访问/集群。