我想返回那些在 infoList 中有任何其他值的文档,而不是从“cake”开始的文档。例如:这是完整的数据:
{ "brand" : "A",
"productType" : "food",
"infoList" : [
"pizza-34","cake-qaw-34"
]},
{
"brand" : "B",
"productType" : "food",
"infoList" : [
"pasta-3"
]},
{
"brand" : "c",
"productType" : "food",
"infoList" : [
"cake-233"
]}
运行弹性搜索查询后,我应该只获取这些数据,因为它们具有不以“cake”开头的其他值(pizza-34、pasta-3)。如果有任何文件只有蛋糕,则不应返回。
{ "brand" : "A",
"productType" : "food",
"infoList" : [
"pizza-34","cake-qaw-34"
]},
{
"brand" : "B",
"productType" : "food",
"infoList" : [
"pasta-3"
]},
答案 0 :(得分:0)
在 Elasticsearch 中,没有专门的数组数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值必须具有相同的数据类型更多信息here。因此,无法区分 Array 数据类型中的元素。所以如果你运行这个查询:
查询:
GET myindex2/_search
{
"query": {
"bool": {
"must_not": [
{
"prefix": {
"infoList": "cake"
}
}
]
}
}
}
结果如下:
结果:
"_source" : {
"brand" : "B",
"productType" : "food",
"infoList" : [
"pasta-3"
]
}
如您所见,您只会得到没有蛋糕的文档和带有“pizza-34”的文档,“cake-qaw-34”不会返回,因为 Elastic 将整个数组视为单个字符串。如果你想得到你想要的结果,你需要从 Elasticsearch 中查询,然后过滤结果。