匹配多值字段仅查询值的位置

Match where multi valued field has only value queried

我有一些文档,其中一个字段是多值的。例子是

{
  "numbers": ["Seventeen"]
},
{
  "numbers": ["Twenty One"]
},
{
  "numbers": ["Seventeen", "Twenty One"]
},
{
  "numbers": ["Twenty One", "Nineteen"]
} 

如果我查询 q=numbers:"Twenty One" 那么它将 return 两个文档,其中 "Twenty One" 是 "numbers" 字段的值。有没有办法让它 return 仅是将 "Twenty One" 作为其唯一值的文档?

谢谢,

添加名为 numbers_count 的第二个字段,添加 copyField 指令以将内容从 numbers 字段移动到 numbers_count,并添加带有 CountFieldValuesUpdateProcessorFactory 附加到 numbers_count 字段。

<updateRequestProcessorChain name="add-numbers-count">
  <processor class="solr.processor.CountFieldValuesUpdateProcessorFactory" />
  <processor class="solr.LogUpdateProcessorFactory" />
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

(需要最后两个处理器才能使处理器在 SolrCloud 中正确分发文档)

然后在索引内容时包含参数 update.chain=add-numbers-count,或者将其配置为请求处理程序之一的默认值:

<initParams path="/update/**">
  <lst name="defaults">
    <str name="update.chain">add-numbers-count</str>
  </lst>
</initParams>

您可以在 Update Request Processors in the reference guide 下查看有关如何执行此操作的更多示例。

CountFieldValuesUpdateProcessorFactory 将给定值替换为它们的计数,因此在上面的示例中,前两种情况的 numbers_count 字段将为 1,而 2对于后两种情况。这样你就可以将 fq=numbers_count:1 附加到你的查询中,并且只获取那些值为该字段的单个值的字段。

由于此解析将在索引时完成,因此您的查询性能不应因更改而以任何方式真正改变。