0

我正在尝试创建一些报告过滤器,用户可以在其中使用报告上的任何字段搜索配置文件。例如:搜索任何以firstname开头anngradevietc开头的个人资料。

这是我到目前为止写的一个查询:

{
    from: 20,
    size: 20,
    query: {
        filtered: {
            query: {
                match_all: [ ]
            },
            filter: {
                bool: {
                    must: [
                        {
                            prefix: {
                                firstname: "ann"
                            }
                        },
                        {
                            prefix: {
                                grade: "vi"
                            }
                        }
                    ]
                }
            }
       }
   },
   sort: {
       grade: {
           order: "asc"
       }
   }
}

must如果我删除(在过滤器中)的一个孩子bool,它会起作用。但是,一旦我使用多个过滤器,它就不会返回任何结果,并且我需要能够在其中使用任意数量的条目。

另外,如果我使用should而不是must,它可以工作。我不确定我是否误解了逻辑,但据我了解(在这种情况下)must应该只返回以 . 开头firstnameann结果。gradevi

它们确实存在,但此查询找不到它们。

我在这里错过了什么吗?

谢谢

4

1 回答 1

2

因为,我还不能发表评论。我用一些假设来回答。

首先,我正在使用ES 0.90.2 version并且您的查询对我的输入效果很好。但是,根据您的输入大小和执行查询的平台,我的答案可能不是正确的。

假设:索引中的数据数少于 20。

我在索引中添加了以下输入:

'{"name": "ann", "grade": "vi"}'
'{"name": "ann", "grade": "ii"}'
'{"name": "johan", "grade": "vi"}'
'{"name": "johan", "grade": "ii"}'

我的测试查询和你的一样,结果如下:

"hits" : {
    "total" : 2,
    "max_score" : null,
    "hits" : [ ]          // <-- see this part is blank
  }

如您所见,它没有列出命中,但有两个命中。那是因为from:20代码段。如果您更改该值,您可以看到一些结果。如果您想查看所有结果,只需删除该部分即可。

注意:如果不是这种情况,抱歉打扰:(

于 2013-07-26T11:29:16.870 回答