2010-08-31 46 views
5

我有一组Solr文档,其中包含(在其他字段中)带百分比数据的多值字段,或者如果值为空(例如,我可以通过多值字段的成员搜索Solr文档吗?

<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)我能找到一个文档,其中一个特定的成员没有多值领域符合一定的标准? (如果我查询了上述DOC将返回“阿尔法没有成员匹配-1”。)

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

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

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

回答

6
  1. 是的。 -alpha:"-1.0"达到此目的。

  2. 你自己的例子,alpha:[0 TO 1],是解决方案。

简而言之,为什么这个工作原理:每个字段不是一个值或一个数组,而是一个术语向量。查询某个字段的字段是请求包含(或排除),而不是平等操作。

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

+0

感谢您的解释。不幸的是,即使正确的查询在我目前的情况下对我来说也是无用的,但至少现在我已经明白了为什么 - 请参阅编辑。 – Cyranix 2010-08-31 17:54:46

+0

谢谢你,这帮了我很多! :) – Javatar 2014-04-24 07:51:46

2

这当然是可能的。

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

但是你可以把它的查询也是如此。

解决方案#1:

fq=-alpha:-1.0

过滤掉任何有阿尔法等于-1.0

我不知道有关的解决方案#2。你有没有试过你提到的代码?

fq=beta:[0.0 TO 1.0]

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

+0

感谢您的输入。 – Cyranix 2010-08-31 18:15:02