gpt4 book ai didi

elasticsearch - Match_all过滤器上的过滤器未按预期工作

转载 作者:行者123 更新时间:2023-12-02 22:41:42 26 4
gpt4 key购买 nike

Elasticsearch v1.1.1

我从渗滤器得到了意外结果。我已将其分解为最简单的部分,但仍得到奇怪的结果。

首先,我使用映射创建一个新索引:

PUT /test1
{
"mappings": {
"product": {
"properties": {
"subject": {
"type": "nested",
"properties": {
"code": {
"type": "string"
}
}
}
}
}
}
}

然后创建两个对象进行测试:
PUT /test1/product/12345
{
"subject": {
"code": "FA"
}
}

PUT /test1/product/12346
{
"subject": {
"code": "BA"
}
}

然后,我创建一个只希望在第二条记录上匹配的查询:
GET /test1/product/_search
{
"query": {
"filtered": {
"query": {
"match_all": []
},
"filter": {
"bool": {
"must_not": [
{
"query": {
"nested": {
"path": "subject",
"query": {
"prefix": {
"subject.code": "fa"
}
}
}
}
}
]
}
}
}
}
}

到目前为止,一切都按预期进行。查询返回第二条记录,第一条记录被过滤器排除。

然后,我使用相同的查询来创建渗滤器:
PUT /test1/.percolator/TEST
{
"query": {
"filtered": {
"query": {
"match_all": []
},
"filter": {
"bool": {
"must_not": [
{
"query": {
"nested": {
"path": "subject",
"query": {
"prefix": {
"subject.code": "fa"
}
}
}
}
}
]
}
}
}
}
}

并针对两个记录进行测试:
GET /test1/product/12345/_percolate

GET /test1/product/12346/_percolate

它们都返回相同的结果:
{
"took": 1,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"total": 1,
"matches": [
{
"_index": "test1",
"_id": "TEST"
}
]
}

我已经在没有嵌套对象的情况下对其进行了测试,并且它的运行符合我的预期。起初我以为match_all可能对过滤器做了一些奇怪的事情,但是当它不是嵌套对象时,它就可以正常工作。

所以我的问题是,我是否缺少明显的东西?这是预期的行为,我只是在文档中错过了,还是一个错误?

我知道我可以轻松地以其他方式创建此查询(并且愿意接受一些建议),但是我以编程方式进行构建,因此 bool(boolean) 结构似乎是最佳选择。我也尝试过使用带有嵌套“或”过滤器的“非”过滤器,结果相同。

最佳答案

原来这是一个错误。在版本1.2.2中已修复。

更多信息:https://github.com/elasticsearch/elasticsearch/issues/6540

关于elasticsearch - Match_all过滤器上的过滤器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25397702/

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