1

我为 solr 创建了一个模式,但我不知道要添加的文档中每个字段的名称,所以我定义了一个这样的 dynamicField:

<dynamicField name="*" type="text_general" indexed="true" stored="true" />

现在我正在测试并且在导入文档中未定义的字段时没有收到错误,但是当我尝试查询*:something(“*”以外的任何内容)时,我没有得到任何结果。我的问题是如何定义一个全部字段,有没有正确的方法来做到这一点?还是我有错误的印象,即查询*:something通常会在所有文档和所有字段中搜索“某物”?

4

2 回答 2

1

搜索关键字 `*:something` 无法从 solr 获取任何内容,无论您使用哪种字段,dinamicField 与否。

如果我正确理解您的问题,您希望 dynamicField 存储所有字段并希望稍后查询所有字段。

这是我的解决方案。

首先,为搜索定义一个 default_search 字段:

<field name="default_search" type="text" indexed="true" stored="true" multiValued="true"/>

然后将所有字段复制到 default_search 字段中。

<copyField source="*" dest="default_search" />

最后,您可以像这样查询所有字段:

http://host/core/select/?q=something

或者

http://host/core/select/?q=default_search:something
于 2013-08-14T08:29:33.090 回答
1

AFAIK*:something不会查询所有字段。它查找字段名称*

尝试查询时出现以下错误*:test

<response>
    <lst name="responseHeader">
        <int name="status">400</int>
        <int name="QTime">9</int>
        <lst name="params">
            <str name="wt">xml</str>
            <str name="q">*:test</str>
        </lst>
    </lst>
    <lst name="error">
        <str name="msg">undefined field *</str>
        <int name="code">400</int>
    </lst>
</response>

您需要copyFieldschema.xml.

我建议不要对动态字段使用简单的通配符。取而代之的是这样的:

<dynamicField name="*_text" type="text_general" indexed="true" stored="true" />

然后有一个包罗万象的领域

<field name="CatchAll" type="text_general" indexed="true" stored="true" multiValued="false" />

您可以copyField定义如下,以支持查询,例如q=something

<copyField source="*_text" dest="CatchAll" />
于 2013-08-14T08:29:37.063 回答