AWS Cloudsearch:能否无需重复值即可多字段查询同一内容?
AWS CloudSearch 多字段同值查询的简化写法问题
好问题!我来帮你理清AWS CloudSearch里这个查询语法的细节:
很遗憾,在AWS CloudSearch的结构化(复合)查询语法中,确实没有像你设想的curr_addr+other_addr:'123 someplace'这种只指定一次值就能匹配多个字段的简写方式——你必须为每个目标字段单独重复输入要匹配的值,就像你当前使用的查询语句那样:
(and (or name:'john smith') (or curr_addr:'123 someplace' other_addr:'123 someplace'))
这是因为CloudSearch的结构化查询是基于布尔逻辑子句设计的,每个字段:值都是一个独立的查询单元,语法本身不支持“多字段共享同一值”的快捷写法,你的现有写法已经是符合规范的最优结构化查询方式了。
不过如果想避免重复输入值,你可以考虑这两个替代方案:
- 创建复合字段:提前在索引中新增一个复合字段(比如命名为
all_addresses),将curr_addr和other_addr的内容同步到这个字段里。之后查询时只需要写all_addresses:'123 someplace',就能同时匹配两个原始地址字段的内容。需要注意的是要保证这个复合字段的数据和原始字段同步一致。 - 切换到简单查询字符串语法:如果你的查询场景不需要结构化查询的复杂布尔逻辑,CloudSearch的简单查询字符串语法支持多字段同值的写法,示例如下:
这种写法可以实现一次指定值匹配多个字段,但灵活性不如结构化查询,没法和复杂的'123 someplace' fields=(curr_addr,other_addr)and/or逻辑深度结合。
总结一下:如果必须使用结构化查询,重复值是不可避免的;如果可以调整查询方式或索引结构,上面的两个方案能帮你简化查询操作。
内容的提问来源于stack exchange,提问作者RTF
相关产品推荐
相关产品推荐

