我有以下SQL查询:
SELECT * FROM
table WHERE
area IN ('UK', 'US', 'France')
AND rating IN ('GOOD', 'BAD','AVG')
AND active = 'YES'
我想将其转换为弹性查询。
请参阅我尝试使用以下"filter"
:
{
"query" : {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"bool" : {
"must" : [{
"terms" : {
"area" : [
"UK",
"US",
"France"
]
}
},
{
"terms" : {
"rating" : [
"GOOD",
"BAD",
"AVG"
]
}
},
{
"term" : {
"active" : "YES"
}
}
]
}
}
}
}
}
然而,这并没有帮助我得分,因为所有这些匹配都在过滤器内。有没有办法将所有这些“必须”匹配移动到“查询”,以便我可以获得得分结果?
我正在寻找一种方法将上面的SQL查询转换为弹性搜索查询,所有条件都在“查询”而不是“过滤器”
非常感谢。
答案 0 :(得分:1)
您可以使用bool query
代替bool filter
。您的查询将转换为:
{
"query": {
"bool": {
"must" : [{
"terms" : {
"area" : [
"UK",
"US",
"France"
]
}
},
{
"terms" : {
"rating" : [
"GOOD",
"BAD",
"AVG"
]
}
},
{
"term" : {
"active" : "YES"
}
}
]
}
}
}
现在所有条件都在查询中而不是在filter.Hope中有帮助。
答案 1 :(得分:0)
您已走上正轨,只需在bool/must
内移动query
数组,即可完全删除filtered
查询:
{
"query": {
"bool": {
"must": [
{
"terms": {
"area": [
"UK",
"US",
"France"
]
}
},
{
"terms": {
"rating": [
"GOOD",
"BAD",
"AVG"
]
}
},
{
"term": {
"active": "YES"
}
}
]
}
}
}