使用正则表达式或通配符过滤器通过id查询Elasticsearch

我有一个ID列表:

bc2***********************13
b53***********************92
39f***********************bb
eb7***********************7a
80b***********************22

每个*都是一个未知的字符,我需要找到与这些模式匹配的所有ID.

我尝试使用id,_id和ID等字段名称的正则表达式过滤器,始终使用“bc2.* 13”(或其他),但即使对于现有文档也始终没有匹配.

最佳答案 默认情况下,_id字段未编入索引:这就是您没有结果的原因.

尝试在映射中分析设置_id字段:

POST /test_id/
{
  "mappings":{
    "indexed":{
      "_id":{
        "index":"analyzed"
      }
    }
  }
}

添加一些文档:

PUT /test_id/indexed/bc2***********************13
{
  "content":"test1"
}

PUT /test_id/indexed/b53***********************92
{
  "content":"test2"
}

我查看了一个简单的正则表达式查询:

POST /test_id/_search
{
  "query": {
    "regexp": {
      "_id": "bc2.*13"
    }
  }
}

结果:

"hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_id",
            "_type": "indexed",
            "_id": "bc2***********************13",
            "_score": 1,
            "_source": {
               "content": "test1"
            }
         }
      ]
   }

希望这可以帮助 :)

点赞