0

我有一个 json 块保存为 solr 中的一个文档,

{
    "internal":...
    "internet":...
    "interface":...
    "noise":...
    "noise":...
}

我可以搜索为“ inter*:* ”吗?我想找出以“inter”开头的所有内容

不幸的是,我遇到了解析器错误,有什么方法可以在密钥中使用通配符进行搜索?

4

2 回答 2

0

您可以使用Dynamic fields. 它允许 Solr 索引您未在架构中明确定义的字段。

如果您发现忘记定义一个或多个字段,这将很有用。Dynamic fields通过在可以添加到 Solr 的文档中提供一些灵活性,可以使您的应用程序不那么脆弱。

动态字段可以定义为

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

有关动态字段的更多信息,请参阅 solr 文档。 动态字段

在此之后创建一个复制字段。将动态字段复制到复制字段中。

完成此操作后,可以在 copyField 上进行查询。

<dynamicField name="inter_*" type="string" indexed="true" stored="true"/>
<field name="internal_static" type="string" indexed="true" stored="true" multiValued="true"/>
<copyField source="inter_*" dest="emp_static"/>
于 2020-02-08T09:08:44.990 回答
0

不,不是。您必须这样做,就copyField好像提供通配符对您很重要一样,实际上是将所有内容复制到单个字段中,然后查询该字段。

只要您使用查询处理程序,您就可以提供多个字段,qf而无需在参数中指定每个字段- 这通常更灵活,但仍需要指定每个字段。qedismax

还有一个鲜为人知的功能,名为“使用每个字段qf覆盖的字段别名”(至少我不知道)。如果我已经正确解析了我从一些网络搜索中找到的内容,那么您应该能够做到f.i_fields.qf=internal internet interface&qf=i_fields. 实际上创建了一个i_fields引用这三个字段的别名。你仍然必须明确地给出它们。

于 2020-02-08T09:11:14.300 回答