假设我有一个字段来指示 1 到 7 之间的整数范围(表示年龄 1 至 7)
(1,5) (2,7)
我还有一个特殊的价值all
这意味着ages don't matter
我想在弹性搜索中索引和搜索此字段。
当用户使用all
年龄进行搜索时,我想返回基本上match_all
。
在 elasticsearch 索引中放入什么适当的值来支持这种类型的搜索?
当我们不确定年龄时,我也有该字段的空值。
我不相信 Elasticsearch 有"范围"字段类型,所以你要么被一个字符串困住,例如"(1,5)",在那里你找不到 2 岁在那里,要么分成两个字段,例如"age_low"、"age_high"。
对于两个字段,如果年龄无关紧要,您可以将它们留空,或将它们设置为愚蠢的值,例如 (0, 200)。
从性能的角度来看,执行此操作的最佳方法是在字节字段中索引范围中的每个整数。由于字段可以保存数组,因此您只需搜索给定的年龄并找到与给定年龄范围匹配的所有文档。对于"all"情况,只需存储值从 0 到 150 的文档。
如果你想坚持你当前的语法,你可以使用转换来解析你的"(x,y)..."。字符串并将值存储在索引中(但不是 _source JSON 文档)。