【问题标题】:Correct way to store MD5 hashes in an Elasticsearch index在 Elasticsearch 索引中存储 MD5 哈希的正确方法
【发布时间】:2019-06-17 12:02:22
【问题描述】:

我正在使用 Elasticsearch 创建自定义搜索 API。我需要将 MD5 哈希值存储在其中一个索引中。我还需要该字段可搜索。我应该如何索引/分析该字段以使搜索足够高效? 我需要查询足够快地工作以支持自动完成。

到目前为止,我只将该字段映射为文本。 我正在使用“match_phrase_prefix”查询,它现在运行良好。但是,我担心随着越来越多的文档被索引,性能是否会下降。 我还想使用“完成”建议映射,但这限制了我们过滤任何其他字段。因此,它不会起作用。 我还计划使用具有低 min_gram 和高 max_gram 值的“edge_ngram”分析器。注意到索引大小随着该映射迅速增加。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    由于 MD5 哈希由单个令牌组成,因此您无需使用 match_phrase_prefix 而只需使用 prefix。试试看。

    还请注意,您绝对可以通过使用 context suggester 而不是完成建议器来使用完成和过滤。但是,当然,您只能提供类别上下文或地理上下文,不能提供日期范围或其他更先进的过滤器/上下文。

    如果您一直在搜索精确的 MD5,我会使用 keyword 类型。 但是,如果您正在搜索 MD5 前缀(在某些情况下还有一些过滤器),那么使用适当的 edge-ngram 分析器的text 会更好地工作,即使您的索引大小会增加。

    在不了解您的用例的情况下,这几乎是所有可以说的。

    【讨论】:

    • 太棒了!我认为edge-ngram是一种方式。谢谢!
    • 这里还有一个很好的资源值得一读,它比较了三种方法(前缀、边缘-ngram 和完成):medium.com/@mourjo_sen/…
    • 谢谢!问了大约 2 周后的反馈,我选择了 edge-ngram,性能非常好。
    • 太棒了,很高兴它有帮助!
    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多