我使用Solr下载附带的默认Jetty服务器在我的Ubuntu机器上运行了一个Solr实例。每当我使用
启动Solr时java -jar 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 ERROR 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://
答案 0 :(得分:47)
我遇到了同样的问题。
如果<defaultSearchField>
文件中没有solrconfig.xml
,请查找/select
处理程序。
在其中你会找到类似这样的东西
<str name="df">text</str>
这是罪魁祸首。 df
表示默认字段,默认情况下,它非常愚蠢地设置为一个名为text
的字段,许多人可能没有。
将其删除并将其替换为您的默认搜索字段。
答案 1 :(得分:38)
默认的solr配置定义了一些请求处理程序,其默认值与solr tarball中包含的默认架构相匹配。
检查solrconfig中定义的请求处理程序,您可能会发现这一点
<str name="qf">
和其他配置值包括您未在架构中定义的某些字段。
另外,请检查您的schema.xml,默认搜索字段未设置为 text ,如下所示:<defaultSearchField>text</defaultSearchField>
答案 2 :(得分:0)
我有同样的问题,有时出现在404回答中,如上所述,或者作为jetty堆栈跟踪中的例外:
SEVERE: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)
我检查了设置为“content”的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>
答案 3 :(得分:0)
文本字段由其他字段的副本组成,如默认schema.xml中所指定(插入新文档时)。
因此,当我们在solrconfig.xml中有df“text”时,我们进行搜索而不指定solr管理页面上的字段,例如:video。它将在文本字段中查找(由另一个字段的副本组成)。
答案 4 :(得分:0)
情况可能并非总是如此,但当我遇到类似问题时,结果发现使用 restart 命令重新启动Solr服务器并不足够。使用 stop 命令显式停止服务器,然后使用 start 命令启动它实际上就可以了。我不需要编辑任何文件。
P.S。我的问题是我的Solr核心只能访问/ clustering。