2012-04-12 59 views
23

我有一个Solr实例在我的Ubuntu机器上运行,使用Solr下载附带的默认Jetty服务器。Solr查询 - HTTP错误404未定义的字段文本

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 

正如我虽然说,服务器将:每当我使用

Java的罐子start.jar

服务器启动正常,但总是抛出的异常启动的Solr仍然开始,我可以看到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:// 

回答

38

默认Solr的配置已经制定了符合列入Solr的压缩包默认模式,默认一些请求处理程序。

检查在solrconfig中定义的请求处理程序,您可能会发现 <str name="qf">和其他配置值包含您尚未在模式中定义的某些字段。

另外,检查你schema.xml中,默认搜索字段没有被设置为文本这样的:<defaultSearchField>text</defaultSearchField>

+1

问题是defaultSearchField - 它设置为“文本”,我与文本类型混淆。我将defaultSearchField设置为使用“翻译”(或任何您的字段名称),并且它完美地工作。 – 2012-04-12 19:40:18

+1

在我的情况下,问题是''str name =“qf”>文字'而不是'内容'in'solrconfig.xml'(“content”设置为'defaultSearchField' in 'schema.xml') – daftu 2013-06-17 20:32:38

+0

我一直在寻找这个答案几天,非常感谢,确实我不得不投票了这个awseome答案,但我想知道这是在文档中提到的。 – 2015-01-15 00:33:28

0

我上面或描述有时会出现无论是在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> 
+0

为了完成我的上述文章,我在我的模式中有一个字段的“文本”定义: – 2012-04-18 16:32:43

+1

看第一个答案。您可能需要编辑您的solrconfig.xml。 – 2012-06-14 14:33:40

46

我有同样的问题。 如果solrconfig.xml文件中没有<defaultSearchField>,请查找/select处理程序。

在,你会发现这样的事情

<str name="df">text</str> 

这是罪魁祸首。 df表示默认字段,默认情况下,它很可能很愚蠢地被设置为许多可能没有的字段text

删除它并将其替换为默认搜索字段。

+1

您的解决方案是唯一为我工作的解决方案。谢谢! – 2012-12-14 02:09:32

+0

@NicYoung不客气 – Arindam 2012-12-17 15:22:06

+0

@Arindam在我的schema.xml中我添加了这样 这样我就可以搜索所有字段(希望其正确)我按照你的评论和改变solrconfig.xml为 all_fields。但是我的结果显示空白会是什么原因?????请帮帮我 – sandy 2013-05-07 05:26:13

0

文本字段由默认schema.xml(插入新文档时)中指定的其他字段的副本组成。

因此,当我们在solrconfig.xml中有df“text”时,我们在solr管理页面上没有指定字段的情况下进行搜索,例如:video。它将在文本字段中查找(由其他字段的副本组成)。