【问题标题】:Speeding up elasticsearch more_like_this query加快弹性搜索 more_like_this 查询
【发布时间】:2020-02-22 08:59:43
【问题描述】:

我有兴趣为给定的输入文档获取类似的文档(类似于 KNN)。由于对大小不相似的文档(使用 doc2vec)进行向量化会导致文档向量不一致,然后为用户的输入计算一个向量(可能只是几个术语/句子比较了 doc2vec 模型在哪里训练的文档每个文档将包含 100 或 1000 个单词)尝试查找 k-Nearest Neighbors 会由于缺少特征而产生不正确的结果。

因此,我继续使用 more_like_this 查询,与 kNN 相比,它的工作类似,而与用户输入的大小无关,因为我只对分析文本字段感兴趣。

但是当我在 elasticsearch 中索引数百万个文档时,我担心性能。文档说使用 term_vector 在索引时存储术语向量可以加快分析速度。 但我不明白的是文档在这种情况下指的是哪种类型的术语向量。因为存在三种不同类型的术语向量:术语信息、术语统计和字段统计。 并且术语统计和字段统计计算术语相对于索引中其他文档的频率,当我在索引中引入新文档时,这些向量不会过时。 因此,我假设 more_like_this 文档是指术语信息(这是一个特定文档中的术语信息,与其他文档无关)。

谁能告诉我在索引时仅计算术语信息向量是否足以加速 more_like_this?

【问题讨论】:

    标签: elasticsearch bigdata knn morelikethis


    【解决方案1】:

    不用担心term vectors会过时,因为它们是为每个文档存储的,所以它们会分别更新。

    对于更多这样的内容,只需拥有term_vectors:yes 就足够了,您不需要偏移量和位置。所以,如果你不打算使用突出显示,你应该只使用默认的。

    因此,对于您的文本字段,您需要有这样的映射,这足以加速 MLT 的执行:

    {
      "mappings": {
        "properties": {
          "text": {
            "type":        "text",
            "term_vector": "yes"
          }
        }
      }
    }
    

    【讨论】:

    • 谢谢@Mysterion。但是对于 more_like_this 可能如何抵抗包含数百万个文档的索引,即性能影响......假设我在索引时计算和存储术语向量,您确实有任何想法
    • 根据我过去的经验,数百万个文档对于 MLT 查询来说不是问题
    猜你喜欢
    • 2015-04-27
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多