24

我使用 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://
4

5 回答 5

49

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

在里面你会发现这样的东西

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

那是罪魁祸首。df表示默认字段,默认情况下,并且非常愚蠢,它被设置为text许多人可能没有的字段。

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

于 2012-08-23T15:09:26.493 回答
38

默认 solr 配置定义了一些请求处理程序,其默认值与 solr tarball 中包含的默认模式匹配。

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

另外,检查您的 schema.xml,默认搜索字段未设置为如下文本<defaultSearchField>text</defaultSearchField>

于 2012-04-12T19:31:06.723 回答
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>
于 2012-04-18T16:29:19.163 回答
0

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

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

于 2012-10-02T15:55:36.583 回答
0

情况可能并非总是如此,但是当我遇到类似问题时,结果发现使用restart命令重新启动 Solr 服务器是不够的。使用stop命令显式停止服务器,然后使用start命令启动它实际上起到了作用。我不需要编辑任何文件。

PS 我的问题是我的 Solr 核心只有 /clustering 无法访问。

于 2018-06-05T05:43:43.873 回答