匹配多值字段仅查询值的位置
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
附加到你的查询中,并且只获取那些值为该字段的单个值的字段。
由于此解析将在索引时完成,因此您的查询性能不应因更改而以任何方式真正改变。
我有一些文档,其中一个字段是多值的。例子是
{
"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
附加到你的查询中,并且只获取那些值为该字段的单个值的字段。
由于此解析将在索引时完成,因此您的查询性能不应因更改而以任何方式真正改变。