【问题标题】:solr search query apply condition in both field (exist OR does not exist)solr 搜索查询在两个字段中应用条件(存在或不存在)
【发布时间】:2018-03-07 11:15:29
【问题描述】:

我有不同动态字段的数据。我想在存在字段记录中应用条件,我也不需要存在字段记录。我的 Solr 版本 6.1.0

{"employeeid" : "220",  "displayname_s": "abu", "attr_36977": 55 },
{"employeeid" : "910",  "displayname_s": "test","attr_36400": 565 },
{"employeeid" : "210", "displayname_s": "sam"},
{"employeeid" : "64", "displayname_s": "wel", "attr_36977": 152},

我这样写一个查询

(-attrl_36977:[* TO *] OR attrl_36977:[0 TO 100])

但是这个查询不是锻炼。

空闲结果是前三个记录(220,910,210)。如何解决需求

【问题讨论】:

    标签: solr lucene solrj


    【解决方案1】:

    您必须明确说明您从 OR 语句的第一部分中减去了什么:

    (*:* -attrl_36977:[* TO *]) OR attrl_36977:[0 TO 100]
    

    .. 将为您提供在 attrl_36977 中没有值或在 0 到 100 之间(含 0 到 100)的值的任何文档。

    【讨论】:

    • 我花了大约 4 到 5 小时编写与 @RSK 相同的逻辑,并且在摸不着头脑,为什么我没有得到没有该字段的数据。最后,在这个答案之后,我发现我必须在 - 之前输入*:*。谢啦。 IE。 (end_date:[* TO target] OR (*:* -end_date[* TO *])
    • @RaviSigdel 将其视为“-减去-但它从什么中减去?”会有所帮助。 Lucene(和 Solr)在集合上运行,所以当你想从集合中删除某些东西时,你必须有一些东西可以从中删除 - *:* 代表“索引中的所有文档”。常规的纯否定查询被专门解析为从代表所有文档的集合开始,但是当您添加布尔运算符时,每个术语不再是这种情况。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2015-09-06
    • 2011-12-26
    • 1970-01-01
    • 2020-09-13
    • 2022-01-09
    • 1970-01-01
    • 2011-11-06
    相关资源
    最近更新 更多