5

我有一组 Solr 文档,其中包含(在其他字段中)带有百分比数据的多值字段,如果值为 null,则为 -1,例如

<doc>
    ...
    <arr name="alpha">
        <float>0.23</float>
        <float>0.23</float>
        <float>0.43</float>
    </arr>
    <arr name="beta">
        <float>0.52</float>
        <float>-1.0</float>
        <float>0.34</float>
    </arr>
    <arr name="gamma">
        <float>-1.0</float>
        <float>-1.0</float>
        <float>-1.0</float>
    </arr>
    ...
</doc>

我需要为一组完整的测试用例查找多值字段包含或不包含某个成员的文档。如果我可以使以下任一查询起作用,那么从几十万个特定文档中找到一个特定的文档将是一个巨大的帮助:

1)我可以找到一个特定多值字段的成员都不符合特定条件的文档吗?(如果我查询“alpha has no members matching -1”,将返回上述文档。)

2) 我可以找到一个文档,其中至少一个特定的多值字段的成员满足某个标准吗?(如果我查询“alpha 至少有一个成员 > 0”或“beta 至少有一个成员 > 0”,则会返回上述文档。)

我假设像这样的查询alpha:[0 TO 1]不起作用,因为该字段是一个数组而不是一个标量。“这是不可能的”的明确答案与“这是你如何做的”的答案一样有用 - 在此先感谢。

编辑:与许多问题一样,答案是“重新检查您的假设”——具体来说,生成我们文档的开发人员关闭了百分比字段的索引。

4

2 回答 2

6
  1. 是的。-alpha:"-1.0"实现了这一点。

  2. 您自己的示例alpha:[0 TO 1]是解决方案。

简单地说,为什么会这样:每个字段都不是一个值或一个数组,而是一个术语向量。查询某个字段的某个词是请求包含(或排除),而不是相等操作。

您所指的数组是结果集的一部分,它是 Solr 作为搜索结果的一部分返回的普通存储数据。

于 2010-08-31T16:56:17.097 回答
2

这当然是可能的。

我通常使用 FQ(过滤器查询)参数来得到你想要的: http ://wiki.apache.org/solr/CommonQueryParameters#fq

但是你也可以把它扔到查询上。

#1的解决方案:

fq=-alpha:-1.0

过滤掉 alpha 等于 -1.0 的任何东西

我不确定解决方案#2。您是否尝试过您提到的代码?

fq=beta:[0.0 TO 1.0]

我没有一个好的样本数据集来测试。

于 2010-08-31T16:51:32.383 回答