SOLR - 如何处理2个多值字段之间的AND子句

时间:2011-07-24 16:33:34

标签: solr

我们如何在两个字段之间的SOLR查询中使用AND子句,这些字段是多个值字段?

例如;以下是数据库表的图片

JobseekerID CompanyID发送的电子邮件
=========== =========== ==============

123 ABC 22-JUL-2011

123 XYZ 01-Jul-2011

现在在Sql中,如果我查询

CompanyID =“ABC”AND EmailSentOn> 2011年7月14日(它将返回TRUE)

CompanyID =“XYZ”AND EmailSentOn> 2011年7月14日(它将返回FALSE)

我们如何在SOLR中处理它?以下是我的SOLR Collection的图片,我如何存储数据

{int name =“jobseekerid”} 123 {/ int}

.....................

.....................

.....................

{arr name =“CompanyID”}

   {str}ABC{/str}

   {str}XYZ{/str}

{/ ARR}

{arr name =“EmailSentOn”}

   {str}2011-07-22T17:44:00Z{/str}

   {str}2011-07-01T05:10:00Z{/str}

{/ ARR}

如何在SOLR中查询求职者123.因为对于SOLR,CompanyID和EmailSentON之间没有任何关系。它需要两个独立的实体。

当我们查询公司ID是“ABC”和EmailSentOn> = 2011年7月14日时,它将返回TRUE,当我们说CompanyID是“XYZ”并且EmailSentOn> = 2011年7月14日时它将再次返回TRUE,因为SOLR会看到,公司ID“XYZ”是否存在且“发送的电子邮件”中的任何日期大于14 - 7,那么它将返回true。

但我们需要它来检查公司ID“XYZ”,然后公司XYZ日期是否大于14 - 7月。哪个不是,因为XYZ发送的电子邮件日期是“01-Jul”。所以它应该返回false。

我希望你明白我的观点。任何人都可以指导我如何在SOLR中处理这个问题?

1 个答案:

答案 0 :(得分:0)

这里的问题是模式的定义 - 你实际上没有多值数据!相反,您应该只有两个单独的索引文档,其中包含CompanyId和EmailSentOn的单个值。然后,当您按日期搜索时,您只能获得一个或另一个文档的内容,并且不会像现在那样混淆结果。