我的架构中有一个名为citation
的多值字段。数据库中的一个文档具有此字段的值,如:
"citation":["13-33",
"12-44"],
我希望能够执行以下查询:citation:(13 44)
并且不会返回此文档。换句话说,我不希望查询跨越字段的单个值。
有办法做到这一点吗?
使用上述文档的一些其他示例,我想要这个如何工作:
答案 0 :(得分:0)
Solr不支持这种查询,但也许您可以尝试使用块连接来实现它。 https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers
答案 1 :(得分:0)
SurroundQueryParser是确定两个术语是否与multiValued字段的值相同的最佳选择。多值字段实际上是内部一长串令牌,但属于的令牌之间存在较大差距不同的"值"。它由schema.xml中的positionIncrementGap参数控制,通常为100.因此,将最大间隙设置为低于100将要求两个项都在一个字段值内。
答案 2 :(得分:0)
我认为您可以使用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>
然后您的示例文档将被编入索引:
“引用”:[“13”,“13-33”,“12”,“12-44”]
这意味着该文档将匹配citation:"13"
和citation:"13-33"
,但不会citation:"13-12"
或citation:"13-44"