我正在使用Elasticsearch创建自定义搜索API。我需要将MD5哈希存储在索引之一中。我还需要该字段可搜索。我应该如何索引/分析字段,以使搜索足够有效? 我需要查询足够快地工作以支持自动完成功能。
到目前为止,我已经将该字段映射为仅文本。 我正在使用“ match_phrase_prefix”查询,该查询到目前为止效果良好。但是,我担心随着索引越来越多的文档而导致性能下降。 我还想使用“完成”建议映射,但这限制了我们对其他任何字段的过滤。因此,它将无法正常工作。 我还计划使用具有较低min_gram和较高max_gram值的'edge_ngram'分析器。注意,索引大小随着映射的增加而迅速增加。
答案 0 :(得分:0)
由于MD5哈希由单个令牌组成,因此您无需使用match_phrase_prefix
,而只需使用prefix
。试试吧。
还请注意,您绝对可以通过使用context suggester而不是完成建议程序来使用完成和过滤。但是,当然,您只能提供类别上下文或地理上下文,而不能提供日期范围或其他更多演变的过滤器/上下文。
如果您一直在搜索确切的MD5,我会使用keyword
类型。
但是,如果您要搜索MD5前缀(某些情况下加上某些过滤器),那么即使索引大小会增加,使用适当的edge-ngram分析器的text
也会更好地工作。
在不了解您的用例的情况下,几乎可以说全部。