Elasticsearch使用过滤器搜索不同索引,从而提升特定索引

时间:2019-02-01 11:07:25

标签: elasticsearch

我正在使用ElasticSearch 6.5在几个索引中进行搜索。 我将尝试解释这种情况:我有一个多租户应用程序,客户可以在其中搜索产品。有共享的产品和租户的产品。

我将共享产品保存在单独的只读索引A中,它们大约为2百万。每个租户在索引B中都有自己的“自有空间”,可以在其中添加自己的产品。

租户可以在自己的索引中复制共享产品。在搜索期间,我需要过滤两个索引(A和B)中的数据,以删除重复项,但索引B的优先级应高于索引A =>这意味着,如果将产品从索引A复制到索引B,则在搜索过程中会显示B版本。换句话说,产品的B版本必须“替代” A版本。

现在,我正在使用ES过滤器(https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html),因为我不需要分数并且搜索准确无误,并且我希望得到斋戒的答复。过滤器也被缓存,从而改善了我的应用程序中的用户体验。

我知道我可以通过这种方式对多个索引使用重复数据删除:

POST  http://myElastic.com/test/e1,e2,e3/_search
{
  "aggs":{
    "dedup" : {
      "terms":{
        "field": "id"
       },
       "aggs":{
         "dedup_docs":{
           "top_hits":{
             "size":1
           }
         }
       }    
    }
  }
}

我想知道如何优先使用继续使用过滤器而不是查询(具有分数)的索引B。 此外,我想知道在这种情况下分页和排序是否正常工作,在这种情况下,ES必须合并来自多个索引的不平衡数据(在索引A中我拥有200万个产品,在索引B中我拥有A产品的一部分应覆盖它们,加上租户的定制产品。

0 个答案:

没有答案