仅搜索 Solr 多值字段的单个值,而不是跨值

Search only for single value of Solr multivalue field, not across the values

我的架构中有一个名为 citation 的多值字段。数据库中的一个文档具有此字段的值,例如:

 "citation":["13-33",
             "12-44"],

我希望能够执行如下查询:citation:(13 44) 并且不返回此文档。换句话说,我 希望查询跨越字段的各个值。

有办法吗?


使用上面的文档的一些进一步示例,说明我希望如何工作:

Solr 不支持这种查询,但也许你可以尝试块连接来实现它。 https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers

SurroundQueryParser 是确定两个术语是否在多值字段的相同值中的最佳选择。多值字段实际上在内部是一长串标记,但标记之间有很大差距属于不同的"values"。这由 schema.xml 中的 positionIncrementGap 参数控制,通常为 100。因此,将最大间隙设置为低于 100 将要求两个项都在一个字段值内。

我认为您可以通过 citation 字段的正确字段类型和标记化来解决此问题。如果您使用这样的字段类型:

<fieldType name="citation" class="solr.TextField" positionIncrementGap="100">
 <analyzer type="index">
   <tokenizer class="solr.KeywordTokenizerFactory"/>
   <filter class="solr.PatternCaptureGroupFilterFactory" 
           pattern="([0-9]+)-[0-9]+" preserve_original="true"/>
 </analyzer>
</fieldType>

然后您的示例文档将被编入索引:

"citation":["13", "13-33", "12", "12-44"]

这意味着文档将匹配 citation:"13"citation:"13-33",但不会匹配 citation:"13-12"citation:"13-44"