lucene - 我可以按多值字段的成员搜索 Solr 文档吗?

标签 lucene solr multivalue

我有一组 Solr 文档,其中包含(在其他字段中)带有百分比数据的多值字段,如果值为空,则为 -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] 这样的查询不起作用,因为该字段是数组而不是标量。 “这是不可能的”的明确答案与“这就是你怎么做”的答案一样有用——在此先感谢。

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

最佳答案

  • 是的。 -alpha:"-1.0"实现这一点。
  • 你自己的例子,alpha:[0 TO 1] ,是解决方案。

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

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

    关于lucene - 我可以按多值字段的成员搜索 Solr 文档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3611191/

    相关文章:

    mysql - MySQL 中的多值属性

    java - 在 Solr 组件的准备方法中执行分布式搜索

    php - 在 elasticaserch 中应用游标分页

    java - 在 PyLucene 中实现自定义相似度

    Solr : Server at http://localhost:8080//solr returned non ok status:500, 消息:内部服务器错误

    java - 哪种Java数据结构最适合双向多值映射

    java - Elasticsearch 中的模式匹配?

    hadoop - 如何将PDF文件从HDFS索引到Solr

    linux - 添加核心 : Solr Error

    elasticsearch - Elasticsearch 多值字段聚合