【问题标题】:IDF calculatiing based on filtered documents?基于过滤文档的 IDF 计算?
【发布时间】:2018-05-16 17:34:23
【问题描述】:

我打算使用 Elasticsearch 设计一个多租户搜索平台。一种选择是共享索引跨租户。但问题是,同一索引中不同租户的文档可能会影响结果的评分,因为评分的 IDF 部分是针对一个索引中的所有文档计算的。 有没有办法让ES根据过滤后的文档计算IDF?例如,按租户过滤文档,使一个租户的文档不会影响同一索引中另一个租户的文档得分。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    根据search_type=dfs_query_then_fetch 参数,没有内置方法可以根据某些内容而不是索引(或分片)中的文档来计算 IDF。

    你有什么选择:

    • 实现自定义相似度,它将以您需要的方式计算 IDF(不确定它是否足够高效,还需要自定义代码 + 自定义部署)

    • 单独的索引

    • 使用_routing 字段将租户 X 的文档路由到分片 X,同时将租户 Y 文档路由到分片 Y。有关此方法的更多信息 - https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html。稍后,不要使用全局 IDF,而是使用本地 IDF(默认参数),它应该可以解决问题。问题是——你对这个的控制真的很有限——每个租户只有一个分片,这使得以后无法正确扩展。

    【讨论】:

    • 感谢您的建议!对于选项 1,您的意思是开发插件吗?对于选项 3,是的,存在可扩展性问题,并使索引分片不平衡。
    • 是的,我的意思是——开发一个插件。无论如何,除了列出来之外,我几乎看不到任何其他解决方案
    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2020-01-18
    • 2023-03-08
    • 1970-01-01
    • 2016-02-06
    • 2018-11-06
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多