有没有办法过滤查询,所以我会获得包含至少一个其他值的特定数组字段的文档,除了我传递的值。
例如,我有3个文档。
<doc>
<arr name="my_array">
<int>2</int>
<int>4</int>
</arr>
</doc>
<doc>
<arr name="my_array">
<int>2</int>
</arr>
</doc>
<doc>
<arr name="my_array">
<int>4</int>
<int>3</int>
<int>1</int>
</arr>
</doc>
我希望文档在my_array
中除了2和4之外至少包含一个其他值。
结果将是:
<doc>
<arr name="my_array">
<int>4</int>
<int>3</int>
<int>1</int>
</arr>
</doc>
答案 0 :(得分:4)
你可以尝试
qf=my_array&q=+(2 4) +([* TO 1] [3 TO 3] [5 TO *])
这转换为
我知道between 3 and 3
有点奇怪,但这是由于这个例子。
需要注意的是,您需要在客户端计算查询以正确获取范围子句。虽然计算这个的逻辑并不太难。
我已经尝试使用 eDisMax ,这是像这样配置的
<requestHandler name="standard" class="solr.StandardRequestHandler">
<lst name="defaults">
<str name="defType">edismax</str>
<str name="fl">*,score</str>
<str name="mm">1</str>
</lst>
</requestHandler>
<queryParser name="edismax"
class="org.apache.solr.search.ExtendedDismaxQParserPlugin" />