首页 > 解决方案 > 空字符串在弹性搜索中不匹配

问题描述

我有很多文件uID:。要查询这些文件,我查询如下 -

'query': {
           'term':  {
               'uID': ''
             }
    }

但它没有获取任何文件。为什么它不扔任何文件?有没有其他方法可以做到这一点?

标签: elasticsearch

解决方案


即使使用默认分析器,您也可以进行这种搜索:使用脚本过滤器,它速度较慢但可以处理空字符串:

curl -XPOST 'http://localhost:3000/_search' -d 
{
 "query": {
   "filtered": {
     "filter": {
       "script": {
         "script": "term. uID.length() == 0"
       }
     }
   }
 }
}

它将返回带有空字符串的文档作为 _content 没有特殊映射

正如@js_gandalf 所指出的,对于 ES>5.0,这是不推荐的。相反,您应该使用:query->bool->filter->script,如https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

q=!(yourfield.keyword:"")

请参阅以下链接以获取更多信息。 https://www.elastic.co/guide/en/elasticsearch/reference/6.5/query-dsl-query-string-query.html#query-string-syntax


推荐阅读