【问题标题】:Good way to exclude records in SOLR or Elasticsearch在 SOLR 或 Elasticsearch 中排除记录的好方法
【发布时间】:2017-09-26 03:59:05
【问题描述】:

对于婚介门户,我们有一个要求,如果客户查看了新娘或新郎的完整个人资料详细信息,那么我们必须从进一步的搜索结果中排除该个人资料。目前,我们将查看的个人资料 ID 与其他详细信息一起存储在字段(逗号分隔)中,以对照新娘或新郎的详细信息。

例如,如果 A 查看了 B,那么在 B 的记录中的字段 saw_me 下,我们将添加 A(逗号分隔)。

在搜索时假设当前搜索的成员 ID 是 123456,那么我们将触发类似的查询

Select * from profiledetails where (OTHER CON) AND 123456 not in saw_me;

这里的问题是 saw_me 字段值正在增长,有没有更好的方法来处理这个要求?请指导。

【问题讨论】:

    标签: elasticsearch solr cassandra sphinx


    【解决方案1】:

    如果这是使用 Solr:

    1. 首先,不要将“AND NOT ...”子句与主查询一起添加到 q 参数中,将它们添加到 fq。这有很多好处(fq 将被缓存)
    2. 在您获得可能为 1000 秒的值列表之前,此方法很简单,应该可以正常工作
    3. 当你到达一个列表很大的地步后,也许是时候转移到一个成本很高的post filter了(所以它是最后查找的)。这将在外部源(redis、db...)中查找要删除的文档。

    【讨论】:

      【解决方案2】:

      在我看来,无论 saw_me 字段增长多少,它在搜索时间上都不会产生太大差异。因为标记是反向索引的,并且 doc_values 是在索引时间以列主要方式创建的,以实现高效读取,并且支持从操作系统。
      ES 有效地为您处理这些事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多