Solr 搜索可以在键中包含通配符吗?

Could Solr search contains wildcard in key?

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

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

我可以搜索“inter*:*”吗?我想找出关键字以 "inter"

开头的所有内容

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

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

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

动态字段可以定义为

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

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

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

完成此操作后,可以在 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"/>

不,不是真的。如果提供通配符对您很重要,您必须将其作为 copyField 来执行,实际上是将所有内容复制到一个字段中,然后查询该字段。

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

还有一个 little known feature named "Field aliasing using per-field qf overrides"(至少我不知道)。如果我正确地解析了我能够从一些网络搜索中找到的内容,你应该能够做到 f.i_fields.qf=internal internet interface&qf=i_fields。实际上创建了一个引用这三个字段的 i_fields 别名。你仍然需要明确地给他们。