Q:有两个人掉到陷阱里了,死的人叫死人,活人叫什么?

关于ES正则和模糊查询问题

Elasticsearch | 作者 dengyao | 发布于2019年07月11日 | 阅读数:7067

字段内容为:"text": "不要了,这个我不要了"
查询语句为:
{
  "query": {
    "regexp": {
      "messages.text": {
        "value": "不要.+不要"
      }
    }
  }
}
结果为:
{
    "took": 11,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": [ ]
}}
查不到结果,网上找资料发现"regexp查询基于词条进行操作。如果你在一个analyzed字段上使用了它们,它们会检查字段中的每个词条,而不是整个字段。"现在有需求需要用正则去这样匹配,这位大神有没有什么好的方案,谢谢
已邀请:

Ombres

赞同来自: su_san

原因在你的问题中已经写的很清晰了。
我这里提供一种解决方案,新加一个字段,这个字段不进行分词,用keyword类型就可以。
举个例子,mapping可以写成这样:
{
"message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
message字段用来全文搜索,message.keyword作为正则查询时候使用

kepmoving - 90后

赞同来自:

将你需要查询的字段type设为keyword

要回复问题请先登录注册