我正在尝试对多个字段进行搜索,并且其中一个字段具有多个完全匹配的值。这就是我在SQL中的处理方式。
select * from logs
where order_id IN (123, 456)
and ( message LIKE 'Order fetched%' OR message LIKE 'Tax allocated%');
超级对如何在Elastic 5.x中执行此操作感到困惑
我的映射是这个。
"properties" : {
"company_id" : { "type" : "long"},
"order_id" : { "type" : "long"},
"sku_id" : { "type" : "long"},
"piece_id" : { "type" : "long"},
"item_titles_order_id" : { "type" : "long"},
"type" : { "type" : "keyword"},
"message" : { "type" : "text"},
"created" : { "type" : "date", "ignore_malformed" : true, "format" : "yyyy-MM-dd HH:mm:ss" }
}
答案 0 :(得分:0)
SQL WHERE AND / OR
逻辑可以转换为bool queries。
SQL IN
过滤器可以转换为terms queries,该过滤器可以对未分析的字段进行操作
SQL LIKE
运算符可以转换为wildcard queries,它可以对未分析的字段进行操作
将所有内容放在一起,您可以尝试以下操作:
{
"query": {
"bool": {
"must": [ // SQL AND
{
"terms": { // SQL IN
"order_id": [123, 456]
}
},
{
"bool": {
"should": [ // SQL OR
{
"wildcard": { // SQL LIKE
"message": "Order fetched*"
}
},
{
"wildcard": {
"message": "Tax allocated*'"
}
}
]
}
}
]
}
}
}
您可能需要将message
字段的类型更改为keyword
或为此字段创建keyword
类型的子字段。