如何在SOLR查询中排除字段

12

我有一个 SOLR 查询,应该获取所有存储的字段,除了一个字段。
假设我有20个字段,我需要在&fl=[f],[f],[f],....[f]'中硬编码出我想要获取的19个字段吗?
或者是否有一种类似于以下方式的方法:
&fl=*,![f]'

[f]代表一个字段名。

4个回答

16

很遗憾,通过查询字符串删除字段名的能力仍然是一个未解决的改进请求。请查看SOLR-3191以获取更多详细信息。

在此改进实现之前,您需要在fl参数中指定所有19个字段。但是,您可以更新默认的/select请求处理程序,将您想要返回的19个字段定义为默认设置,并将其应用于除查询字符串中被覆盖的所有查询之外。

下面是示例solrconfig.xml中默认/select请求处理程序的修改版本:

  <requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
     will be overridden by parameters in the request
     -->
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">text</str>
      <!-- Only showing 3 fields for this example -->
      <str name="fl">field1,field2,field3</str>
    </lst>
  </requestHandler>

要了解有关这些默认设置和requestHandler配置的更多详细信息,请参阅SolrConfig中的RequestHandlers和SearchComponents


4
我希望拥有这个功能。 - sky

7
另一个选项可能是:您想要包含的字段应该共享一个公共前缀;除此之外,您可以在 fl 中使用通配符。例如,假设前缀是 tobeincluded_,您可以将 fl 值设置为 tobeincluded_*。

3
另一个选择是使用Document transformer ValueAugmenterFactory,将字段返回的实际值替换为空字符串。如果您的要求仅是避免返回该字段的内容,则应该可以解决问题。下面是一个示例,用于替换标题字段的内容:
&fl=*,title:[value v=""]

1

免责声明:我应该提到我写了那个补丁。 - Gus
请在获得批准时/如果获得批准时告知我们。我不熟悉Lucen/SOLR架构,但您不能将其发布为可放置的独立插件吗? - Itay Moav -Malimovka
1
我认为将主类打包并在请求处理程序配置中使用可能是可行的,但要使其显示在“&fl”中供使用,我必须将名称添加到solr中的一个类中。然而,该补丁昨天已经成功应用于6.2分支,因此如果您从apache git检出并在solr目录中使用“ant create-package”进行构建,那么应该会创建基本相同的tarball作为带有此添加的6.2 RC1。 - Gus
踩个负评?补丁从未推进,因为据说3191“已经完成并准备就绪”(我实际上计划很快查看并推动3191),但它确实起作用了。 - Gus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接