Java 接受多个文件的Solr查询返回列表中的第一个非空值,如oracle中的coalesce

Java 接受多个文件的Solr查询返回列表中的第一个非空值,如oracle中的coalesce,java,solr,lucene,spring-data-solr,Java,Solr,Lucene,Spring Data Solr,我们有一个要求,其中有三个字段:用户日期、记录日期和编码日期。 我们使用Solr进行搜索,我们需要使用条件检索记录,如果用户日期存在值,则使用它,否则检查记录日期,如果它也不包含值,则使用编码日期,如果所有三个字段都不包含值,则忽略该字段 此要求类似于oracle中的合并功能,它接受两个或多个参数并返回列表中的第一个非空值。如果所有参数都包含null值,则返回null 更新:我们正在使用Solr 3.5.0 例如,下面是我在表中的值 DocumentID User entered date

我们有一个要求,其中有三个字段:用户日期、记录日期和编码日期。 我们使用Solr进行搜索,我们需要使用条件检索记录,如果用户日期存在值,则使用它,否则检查记录日期,如果它也不包含值,则使用编码日期,如果所有三个字段都不包含值,则忽略该字段

此要求类似于oracle中的合并功能,它接受两个或多个参数并返回列表中的第一个非空值。如果所有参数都包含null值,则返回null

更新:我们正在使用Solr 3.5.0

例如,下面是我在表中的值

 DocumentID   User entered date      Recorded date      Encoded date
    A123        14th April 2016     12th April 2016 
    A124        12th April 2016                         11th April 2016
    A125                            13th April 2016     12th April 2016
    A126                            12th April 2016 
    A127                                                15th April 2016

如果我们搜索2016年4月12日,则Solr应将我的输出返回为A124、A126,而不是A123或A125,因为我们分别为这些字段输入了用户输入的日期和记录的日期。

您是否尝试指定要查询的字段名。像这样的

q=foo&qf=title,description 
你试过这个吗


只有第一个字段的第一次查询,用户输入日期。获取所有DocumentID。第二,使用(相同的q值)进行查询,类似于若用户字段值为null,则在第二个字段值中搜索,获取DocumentsID。对第三个字段也执行同样的操作。最后合并所有DocumentsID。

您最好的选择可能是按所需顺序将字段复制到单独的字段中,然后只保留第一个值。在最新的Solr中,我相信这可以在UpdateRequestProcessor步骤中完成,然后是处理器。但是,我很确定,这些URP是在5.x中引入的,因此在Solr3.5中不可用


我怀疑在将数据发送到Solr之前,您真的必须在数据中应用此域逻辑。

看起来您正在寻找
if(expression,trueValue,false value)
函数,如中所述

例如,对于Demax查询解析器,您可以定义boost函数,如

bf="recip(rord(if(exists(u_date),u_date,if(exists(r_date),r_date),if(exists(e_date),e_date,0))),1,1000,1000)"

我认为,一旦您通过应用一些逻辑获得数据,您就需要解决这个问题……它可以通过使用布尔条件的简单查询来实现OR@Oyeme我尝试了或条件,但如果用户日期和记录日期都有值。SOLR正在两个字段中搜索,这两个字段不是我要搜索的。@AbhijitBashetti我正在寻找这样的逻辑。@rajadilipkolli您可以使用DataImportHander编写自己的sql,并具有所有条件,SOLR将为其编制索引:)我尝试了这一方法,但它无法解决问题中提到的问题OK,仅使用第一个字段进行查询,用户输入日期。获取所有DocumentID。第二,使用(相同的q值)进行查询,类似于若用户字段值为null,则在第二个字段值中搜索,获取DocumentsID。对第三个字段也执行同样的操作。最后合并所有文档SID。这种方法可能是一种解决方案,但三次点击是以性能为导向的,所以不能这样做Alex我同意你的看法,但问题是记录日期和编码日期是现有字段,我们最近添加了用户日期。因此,更改逻辑也是一个问题,如果您看到表结构,它可能包含空值,并且可以随时添加值。您的意思是,您已经对这样的记录进行了索引,而重新索引不是一个选项?您正在寻找纯查询时间解决方案?是的,SOLR 3.5中的纯查询时间解决方案在SOLR 4.0中引入,但我们使用的版本是SOLR 3.5