【发布时间】:2018-07-30 10:27:35
【问题描述】:
我有一个包含 5 亿个文档的索引。每个文档本质上都是一个“关键字”/字母和数字字符串(没有空格或标点符号)。字符串平均有 10 个字母,长度在 3 到 40 个字符之间。
我希望能够快速找到关键字字段包含某个子字符串的文档。
我读到“通配符”搜索 (*abc*) 很慢且不可扩展(前缀通配符)。
我现在专注于 n-gram。理想情况下,我认为我应该将“min”和“max”设置为 3 和 40。但是如果我在查询中将两者都设置为 3,并且将 minimum_should_match 设置为 100%,我可以获得一个很好的结果(无需添加大量额外的存储空间对于大小为 4 - 40 的 ngram)。缺点似乎是我得到了一些不需要的结果,例如搜索“dabc”也会匹配“abcd”。
我的问题是,如何以最佳方式(性能和存储)实现我的目标。
我想重新发明轮子吗?我应该只使用 ngram min: 3 和 max: 40 吗?
【问题讨论】:
标签: elasticsearch substring wildcard n-gram