我可以通过多值字段的成员搜索Solr文档吗?

时间:2010-08-31 16:40:00

标签: lucene solr multivalue

我有一组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]这样的查询不起作用,因为该字段是数组而不是标量。 “这是不可能的”的确切答案与“你是怎么做的”答案一样有用 - 提前感谢。

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

2 个答案:

答案 0 :(得分:6)

  1. 是。 -alpha:"-1.0"实现了这一目标。

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

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

    您引用的数组是结果集的一部分,结果集是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]

我没有好的样本数据集可供测试。