【问题标题】:SOLR - How to handle AND clause between 2 multivalue fieldsSOLR - 如何处理 2 个多值字段之间的 AND 子句
【发布时间】:2011-07-25 00:50:23
【问题描述】:

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

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

求职者 ID        公司 ID        电子邮件发送时间
===========     ===========    ==============

123                        ABC               2011 年 7 月 22 日

123                         XYZ               2011 年 7 月 1 日

现在在 Sql 中,如果我查询

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

CompanyID = "XYZ" AND EmailSentOn > 14-Jul-2011(它将返回 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 Now 中查询 Jobseeker 123。因为对于 SOLR,CompanyID 和 EmailSentON 之间没有任何关系。这需要他们两个独立的实体。

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

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

我希望你明白我的意思。谁能指导我如何在 SOLR 中处理这个问题?

【问题讨论】:

    标签: solr


    【解决方案1】:

    这里的问题在于模式的定义——您实际上并没有多值数据!相反,您应该只拥有两个独立的索引文档,其中 CompanyId 和 EmailSentOn 具有单个值。然后,当您按日期搜索时,您只会返回一份或另一份文档的内容,而不会像现在这样将结果弄得一团糟。

    【讨论】:

    • 你的意思是我们必须重复jobseekerID,即使它是模式中的唯一键。请让我稍微解释一下我的数据库结构。这是一个简历管理系统。我们有许多与 Jobseeker 相关的关系表,它们具有一对多的关系。我在架构中遵循了我的数据库结构。 JobseekerID 在我的架构中是唯一的,所有关系表数据都在多值字段中。我的数据库有超过 700,000 名求职者。现在,如果我听从您的建议,那么我的每个求职者都会有 avg。 1000 个关系条目,我的收藏大约有。 700000 X 1000 = 700000000 文档。
    • 您认为这是处理此问题的最佳方法吗?请建议我任何其他方式来处理这个问题。
    • 请记住,Solr 最适合用作全文搜索 Web 服务,而不是关系数据库。如果您在模仿 MySQL 模式,那么您很可能在做一些低效/不正确的事情。你应该弄清楚你在搜索什么,配置一个 Solr 模式来让你完成那个任务,然后把关系的东西留给 MySQL。如果您有 70 万用户,我的回答是您应该拥有远远少于 1000 个文档/用户,除非每个用户确实有 1000 条独特的可搜索信息,这似乎不太可能。
    猜你喜欢
    • 2023-02-10
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2018-01-09
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多