Elasticsearch等于否定的“ LIKE”或“ CONTAINS”语句的等效项是什么?

时间:2018-06-30 11:10:15

标签: elasticsearch

我想做与以下SQL语句等效的Elasticsearch:

  

从用户名不喜欢'%something%'的用户中选择* *

我不在乎效率或得分……这只是偶尔执行。我正在使用请求正文语法。

2 个答案:

答案 0 :(得分:1)

使用普通的wildcard query,然后使用bool must_not query将其取反。

GET Users/_search
{
    "query": {
        "bool": {
            "must_not": [{
                "wildcard": {
                    "UserName": {
                        "value": "*something*"
                    }
                }
            }]
        }

    }
}

答案 1 :(得分:0)

我不确定您的用户是否是您在Elastic中的索引-但这仍然是主要思想:
您可以通过使用regexp进行否定来进行Complement - "~"查询:

GET Users/_search
{
    "query": {
        "regexp":{
            "UserName": {
                "value": ".*~(something).*"
            }
        }
    }
}

有关更多有用的参考,您可以查看here
PS:
您不会获得最佳性能,但可以完成工作