设置参数 `node.name` 可以自定义 Elasticsearch 节点的名字。 此条 Tips 由 medcl 贡献。

es模糊正则搜索wildcard遇上关键字如何转义?

Elasticsearch | 作者 wwwluyh | 发布于2018年05月04日 | 阅读数:10369

es模糊正则搜索wildcard遇上关键字如何转义?
比如:我有个文本内容为 : 123*456
用 \ 转义 一点都不生效 ,
wildcard{
'test':'123\*456'
}
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

POST test_index/test_type/122
{
"txt":"123*456"
}

POST test_index/test_type/_search
{
"query":{
"wildcard":{
"txt.keyword":"123*456"
}
}
}

POST test_index/test_type/_search
{
"query":{
"term":{
"txt.keyword":"123*456"
}
}
}

 
你的问题原因是不是没有加.keyword。
还有wildcard是模糊匹配,中间字符不论什么,完全可以用*代替的。你的*也不例外

bill

赞同来自:

我试的可以转义查询。
应该是分词的原因。索引域要定义成not_analyzed才可以。否则*是无法索引到一个文档里,因为标准分词器会把*,\这些特殊字符过滤。除非你定义了自己的分词器。 
 PUT idx_001

PUT idx_001/_mapping/docs
{
    "properties" : {
        "name" : { "type" : "string",
        "index" : "not_analyzed"
        }
    }
}

PUT idx_001/docs/1?pretty -d 
{
    "name" : "123456"
}

PUT idx_001/docs/2?pretty -d 
{
    "name" : "123*456"
}

GET idx_001/docs/1
GET idx_001/docs/2

只搜到文档2
GET idx_001/_search?pretty -d
{
    "query" : {
        "wildcard" : {
            "name" : "123\\*456"
        }
    }
}

搜到文档1和2
GET idx_001/_search?pretty -d
{
    "query" : {
        "wildcard" : {
            "name" : "123*456"
        }
    }
}

搜到文档1和2
GET idx_001/_search?pretty -d
{
    "query" : {
        "wildcard" : {
            "name" : "123?456"
        }
    }
}

要回复问题请先登录注册