gpt4 book ai didi

elasticsearch - 弹性查询 bool 必须匹配问题

转载 作者:行者123 更新时间:2023-12-04 06:14:23 26 4
gpt4 key购买 nike

下面是 Elastic GET API 中的查询部分,通过 openshift pod 中的命令行,我在获取 2000 个文档时得到了所有匹配查询以及不匹配元素.我怎样才能仅限于匹配元素。我只想专门获取 {\"kubernetes.container_name\":\"xyz\"}}

任何建议将不胜感激

-d ' {\"query\": { \"bool\" :{\"must\" :{\"match\" :{\"kubernetes.container_name\":\"xyz\"}},\"filter\" : {\"range\": {\"@timestamp\": {\"gte\": \"now-2m\",\"lt\": \"now-1m\"}}}}},\"_source\":[\"@timestamp\",\"message\",\"kubernetes.container_name\"],\"size\":2000}'"

最佳答案

对于精确匹配,您需要做两件事:

Text数据类型通过 Analysis阶段。

例如如果您的数据是 This is a beautiful day,在摄取期间,text 数据类型会将单词分解为标记,将它们小写 [this, is, a, beautiful , day] 然后将它们添加到倒排索引中。此过程通过 Standard Analyzer 发生这是应用于文本字段的默认分析器。

现在当您查询时,它会在查询时 再次应用分析器,并搜索相应文档中是否存在单词。结果,您看到的文档即使没有 完全匹配出现。

为了进行精确匹配,您需要使用 keyword 字段,因为它不会经过分析阶段。

我的建议是以下面的方式为您拥有的文本字段创建一个关键字同级字段,然后重新摄取所有数据:

映射:

PUT my_sample_index
{
"mappings": {
"properties": {
"kubernetes":{
"type": "object",
"properties": {
"container_name": {
"type": "text",
"fields":{ <--- Note this
"keyword":{ <--- This is container_name.keyword field
"type": "keyword"
}
}
}
}
}
}
}
}

请注意,我假设您正在使用 object 类型。

请求查询:

POST my_sample_index
{
"query":{
"bool": {
"must": [
{
"term": {
"kubernetes.container_name.keyword": {
"value": "xyz"
}
}
}
]
}
}
}

希望这对您有所帮助!

关于elasticsearch - 弹性查询 bool 必须匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59771072/

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