使用通配符的搜索ID

oknrviil  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(246)

我在ES中的文档使用的ID如下所示:

  • 成交+0+1234
  • 交易+1+1234
  • 成交+0+1235
  • 成交+0+1236

+1、+0等表示正在存储的文档的版本。

现在我只想检索原件。即交易+0+*

但是,我似乎不能在ID查询中使用通配符。

{
    "query": {
        "ids": {
                "values": ["transaction+0+*"]
        }
    }
}

只是返回零个条目。

如有任何建议,我们将不胜感激。谢谢。

yzuktlbb

yzuktlbb1#

_id field documentation中所述,
可以在TERM、TERMS、MATCH和QUERY_STRING等查询中访问_id字段的值。

_id是一种特殊的数据类型,因此通配符在支持它的查询中不起作用,就像query_string一样,因为错误后返回。

"failed_shards": [
            {
                "shard": 0,
                "index": "73860375",
                "node": "JQQackpFTk-LPW-z5BHc8Q",
                "reason": {
                    "type": "query_shard_exception",
                    "reason": "Can only use prefix queries on keyword, text and wildcard fields - not on [_id] which is of type [_id]",
                    "index_uuid": "jeORHQOhS86V_kIZXo0QMA",
                    "index": "73860375"
                }
            }
        ]

我想最好的方法是使用另一个字段id,它使用_id的值,类型为关键字,这样下面的查询就会返回文档。

{
    "query": {
        "query_string": {
            "query": "transaction+0+*",
            "default_field": "id.keyword"
        }
    }
}

相关问题