首页 > 解决方案 > 执行 LOWER() 时,ElasticSearch 查询导致错误“input_mismatch_exception”

问题描述

我正在研究搜索功能,我需要执行一个简单的查询来检查是否有任何匹配转换为小写的搜索字符串。简单来说,用户搜索“SiteName”,然后我查询是否有任何匹配“sitename”的内容。

但是,当我在查询中使用 LOWER() 函数时出现错误。

这是我尝试过的:

POST /_sql?format=json
{
"query":"SELECT siteid, sitename FROM zones WHERE 
sitename LIKE  LOWER('SiteFirst')  ", "fetch_size" : 90 
}

我得到这个错误:

 {
 "error" : {
 "root_cause" : [
   {
     "type" : "parsing_exception",
     "reason" : "line 1:70: mismatched input 'LOWER' expecting {'?', 
 STRING}"
   }
  ],
  "type" : "parsing_exception",
"reason" : "line 1:70: mismatched input 'LOWER' expecting {'?', STRING}",
  "caused_by" : {
   "type" : "input_mismatch_exception",
    "reason" : null
    }
 },
  "status" : 400
}

同样的查询在没有 LOWER() 的情况下也可以工作。

有关如何解决此错误的任何建议?谢谢!

标签: sqlelasticsearch

解决方案


我很确定在 ES SQLLOWER中调用了。LCASE

更重要的是,LIKE仅适用于精确字段而且建议使用MATCH而不是LIKE.

所以试试这个:

POST /_sql?format=json
{
  "query": "SELECT siteid, sitename FROM zones WHERE MATCH(sitename, 'SiteFirst')",
  "fetch_size": 90
}

推荐阅读