gpt4 book ai didi

sql - 使用Grails插件将SQL查询转换为Java Elasticsearch查询

转载 作者:行者123 更新时间:2023-12-02 15:45:12 28 4
gpt4 key购买 nike

如何将以下SQL查询转换为Java Elasticsearch查询?

SELECT s.*
FROM supplier_detail_info sdi
JOIN supplier s ON sdi.supplier_id = s.id
JOIN supplier_detail sd ON sdi.supplier_detail_id = sd.id
WHERE (sdi.value = '70' AND sd.id = 1 ) OR (sdi.value = '46' and sd.id = 4);

我尝试了以下操作(不包括上面的OR子句),但失败了:
def query = QueryBuilders.boolQuery().
must(QueryBuilders.nestedQuery('supplierDetailInfos', QueryBuilders.matchQuery("supplierDetailInfos.value", '46')))
.must(QueryBuilders.nestedQuery('supplierDetailInfos.supplierDetail', QueryBuilders.matchQuery("supplierDetailInfos.supplierDetail.id", 4)))

结果是:
{
"bool" : {
"must" : [ {
"nested" : {
"query" : {
"match" : {
"supplierDetailInfos.value" : {
"query" : "46",
"type" : "boolean"
}
}
},
"path" : "supplierDetailInfos"
}
}, {
"nested" : {
"query" : {
"match" : {
"supplierDetailInfos.supplierDetail.id" : {
"query" : 4,
"type" : "boolean"
}
}
},
"path" : "supplierDetailInfos.supplierDetail"
}
} ]
}
}

我正在使用grails 2.3.7,并具有以下域:
class Supplier {
String name
....

static hasMany = [supplierDetailInfos : SupplierDetailInfo]

static searchable = {
only = ['name', 'supplierDetailInfos']
supplierDetailInfos component: true
}
}

class SupplierDetailInfo {
SupplierDetail supplierDetail
Supplier supplier
String value

static searchable = {
only = ['id', 'supplierDetail', 'value']
supplierDetail component: true
}
}

class SupplierDetail {
String name
....

static searchable = {
only = ['id']
}
}

我正在使用elasticsearch 2.3.5和 flex 搜索插件“org.grails.plugins:elasticsearch:0.1.0”。

据我了解,

must is equivalent to AND





should is equivalent to OR.



上面的查询应该只返回那些当vendor_detail id为4时Supplier_detail_info的值为'46'的供应商。但是它返回所有存在供应商详细信息值为'46'的供应商。它只是忽略了查询的“和sd.id = 4”部分。另外,我不知道如何使用“或”部分。

最佳答案

代替 bool(boolean) 查询,请尝试使用 bool(boolean) 内部查询和两个must子句的嵌套查询。我也认为匹配查询应该是术语查询,因为它们看起来像关键字/长字段而不是文本字段,并且如果您需要OR则必须使用must子句

{
"query":{
"nested":{
"path":"supplierDetailInfos",
"query":{
"bool":{
"must":[
{
"match":{
"supplierDetailInfos.value":"46"
}
},
{
"match":{
"supplierDetailInfos.supplierDetail.id":4
}
}
]
}
}
}
}
}

关于sql - 使用Grails插件将SQL查询转换为Java Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49710451/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com