请问下如下 sql 语句如何转换为 ES 的 DSL 语句:
select * from table where ( ( sex = 1 or sex = 2 ) and ( color = 226 or color = 229 ) ) OR (( sex = 0 or sex = 3 ) and ( color = 226 ) );
按我的理解,我写了下面一个 dsl 查询语句,但是报错:
{ "query": { "bool": { "should": [{ "must": [{ "bool": { "should": [{ "match": { "tags": "1" } }] } }] }] } }, "size": 2}
报错内容:
{ "error": { "root_cause": [ { "type": "parsing_exception", "reason": "[must] query malformed, no start_object after query name", "line": 5, "col": 13 } ], "type": "x_content_parse_exception", "reason": "[5:13] [bool] failed to parse field [should]", "caused_by": { "type": "parsing_exception", "reason": "[must] query malformed, no start_object after query name", "line": 5, "col": 13 } }, "status": 400}
你的 SQL 查询语句和尝试的 Elasticsearch 查询语句有些混淆。在 Elasticsearch 中,我们需要将查询条件组合在一个对象中,如 bool
对象。对于你的 SQL 查询,你应该将其转化为如下的 Elasticsearch 查询语句:
{ "query": { "bool": { "must": [ { "bool": { "must": [ { "match": { "sex": "1" } }, { "match": { "color": "226" } } ], "should": [ { "match": { "sex": "2" } }, { "match": { "color": "229" } } ] } }, { "bool": { "must": [ { "match": { "sex": "0" } }, { "match": { "color": "226" } } ], "should": [ { "match": { "sex": "3" } }, { "match": { "color": "226" } } ] } } ] } }, "size": 2}
以上这段代码应该可以正确地模拟你的 SQL 查询。这段代码的意思是有多个 bool
查询,每个 bool
查询都包含一个 must
查询和一个 should
查询。在 should
查询中,只需要匹配其中的一项就可以。所以,第一个 should
查询表示的是 sex 为 1 或 2,且颜色为 226 或 229。第二个 should
查询表示的是 sex 为 0 或 3,且颜色为 226。只有当所有的 must
查询和至少一个 should
查询匹配时,这个记录才会被返回。
如果希望在匿名类中实现多个方法,那么使用将如何处理,例如: …等等?
宽度不定,图片和主要参建单位居中对齐,右边文字可以换行但是第一行和参建单位对齐
我很少有像下面这样的课 我希望根据聚合项,对于每一个聚合,子项都应该通过以以下方式聚合:
问题内容: 我今天才刚开始编写Go(有0个经验),想知道Go是否支持任何形式的“构建所有源文件” 。 我的项目结构是 当我做 这失败了,这是正确的,因为所有源文件都在子包中。 是否有一个命令可以构建所有子包, 而无需显式列出每个 子包? 问题答案: 你以后到基本目录,使用注意,有3个阶段,因为它是一个省略号。这将递归地构建所有子目录。当然,您始终可以从任何地方进行操作而无需访问目录。 对于使用依赖
该怎么解决?之前都能启动的,也没有找到哪里写了这个路径的文件;打包也没报错 yml文件: 这里是读取这两个yaml文件的意思吗?