我有一组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没有成员匹配-1“,就会返回上面的文档。)
( 2)我能否找到至少一个特定多值字段的成员符合某一标准的文档?(如果我查询"alpha至少有一个成员> 0“或"beta至少有一个成员>0”,则会返回上述文档。)
我假设像alpha:[0 TO 1]这样的查询不能工作,因为字段是数组而不是标量。“这是不可能的”的明确答案与“这是你如何做到”的答案一样有用
编辑:和这么多问题一样,答案是“重新检查你的假设”--具体来说,生成我们文档的开发人员关闭了百分比字段的索引。
发布于 2010-08-31 16:56:17
-alpha:"-1.0"实现了这一点。alpha:[0 TO 1]就是解决方案。简单地说,这是为什么:每个字段不是值或数组,而是术语的向量。查询某一字段是对包含(或排除)的请求,而不是平等操作。
您所引用的数组是结果集的一部分,它是Solr作为搜索结果的一部分返回的普通存储的数据。
发布于 2010-08-31 16:51:32
这当然是可能的。
我通常使用FQ (filter )参数来获取您想要的内容:http://wiki.apache.org/solr/CommonQueryParameters#fq
但是,您也可以将它抛到查询中。
#1的解决方案:
fq=-alpha:-1.0过滤掉任何α等于-1.0的东西
我不确定解决方案2。你试过你提到的代码了吗?
fq=beta:[0.0 TO 1.0]我没有一个好的样本数据集来测试。
https://stackoverflow.com/questions/3611191
复制相似问题