我有一组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)我是否可以找到特定多值字段成员的 none 符合特定标准的文档? (如果我查询“alpha没有成员匹配-1”,则会返回上述文档。)
2)我能找到一个文件,其中特定多值字段的成员中至少有一个符合某个标准吗? (如果我查询“alpha至少有一个成员&gt; 0”或“beta至少有一个成员&gt; 0”,则会返回上述文档。)
我假设像alpha:[0 TO 1]
这样的查询不起作用,因为该字段是数组而不是标量。 “这是不可能的”的确切答案与“你是怎么做的”答案一样有用 - 提前感谢。
编辑:与许多问题一样,答案是“重新检查您的假设” - 具体而言,生成我们文档的开发人员会关闭百分比字段的索引。
答案 0 :(得分:6)
是。 -alpha:"-1.0"
实现了这一目标。
您自己的示例alpha:[0 TO 1]
就是解决方案。
简单地说明为什么这样做:每个字段不是值或数组,而是一个术语向量。查询某个字段的字段是包含(或排除)的请求,而不是相等操作。
您引用的数组是结果集的一部分,结果集是Solr作为搜索结果的一部分返回的纯文本存储数据。
答案 1 :(得分: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]
我没有好的样本数据集可供测试。