仅搜索 Solr 多值字段的单个值,而不是跨值
Search only for single value of Solr multivalue field, not across the values
我的架构中有一个名为 citation
的多值字段。数据库中的一个文档具有此字段的值,例如:
"citation":["13-33",
"12-44"],
我希望能够执行如下查询:citation:(13 44)
并且不返回此文档。换句话说,我 不 希望查询跨越字段的各个值。
有办法吗?
使用上面的文档的一些进一步示例,说明我希望如何工作:
- 引用:(13 33) --> Returns 它。
- 引用:(12 44) --> Returns 它。
- 引用:(12) --> Returns 它。
- 引用:(33 13) --> Returns 它。
- 引用:(33 12) --> 不 RETURN 它。
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"
我的架构中有一个名为 citation
的多值字段。数据库中的一个文档具有此字段的值,例如:
"citation":["13-33",
"12-44"],
我希望能够执行如下查询:citation:(13 44)
并且不返回此文档。换句话说,我 不 希望查询跨越字段的各个值。
有办法吗?
使用上面的文档的一些进一步示例,说明我希望如何工作:
- 引用:(13 33) --> Returns 它。
- 引用:(12 44) --> Returns 它。
- 引用:(12) --> Returns 它。
- 引用:(33 13) --> Returns 它。
- 引用:(33 12) --> 不 RETURN 它。
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"