gpt4 book ai didi

elasticsearch - 简单的Elasticsearch正则表达式

转载 作者:行者123 更新时间:2023-12-03 01:15:25 25 4
gpt4 key购买 nike

我试图编写一个查询,以给我所有字段为“id”的格式的文档:“SOMETHING-SOMETHING-4SOMETHING-SOMETHING-SOMETHING”
例如,ab-ba-4a-b-a是有效的ID。
我写了这个查询

  "query": 
{
"regexp":
{
"id":
{
"value": ".*-.*-4.*-.*-.*"
}
}
}
它没有命中。这怎么了我可以看到许多这种形式的ID。

最佳答案

如果id字段的类型为 keyword ,则regexp应该可以正常工作。
但是,如果它的类型为 text ,请注意elasticsearch如何在内部存储 token 。

POST /_analyze
{
"text": "abc-abc-4bc-abc-abc",
"analyzer": "standard"
}
响应:
{
"tokens" : [
{
"token" : "abc",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "abc",
"start_offset" : 4,
"end_offset" : 7,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "4bc",
"start_offset" : 8,
"end_offset" : 11,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "abc",
"start_offset" : 12,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "abc",
"start_offset" : 16,
"end_offset" : 19,
"type" : "<ALPHANUM>",
"position" : 4
}
]
}
注意,它将 token abc-abc-4abc-abc-abc分解为5个字符串。看一下 AnalysisAnalyzers是什么,以及它们如何仅应用于 text字段。
但是,仅在您不希望对文本进行分析(即分解为 token 并存储在反向索引中)并在内部存储字符串值的情况下创建了关键字数据类型。
现在以防万一,如果您的映射是动态的,则ES默认情况下会为字符串值创建两个不同的字段。文本及其关键字同级,如下所示:
{
"mappings" : {
"properties" : {
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
在这种情况下,只需对 id.keyword字段应用查询即可。
POST <your_index_name>/_search
{
"query": {
"regexp": {
"id.keyword": ".*-.*-4.*-.*-.*"
}
}
}
希望有帮助!

关于elasticsearch - 简单的Elasticsearch正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62757711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com