elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果

elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果,elasticsearch,elasticsearch,我正在尝试对文档应用嵌套筛选器,但是,当我专门按其中一个嵌套属性进行筛选时,总是得到0个结果。例如,使用以下映射: "PARTNER": { "properties": { "Addresses": { "properties": { "CountyCode": { "type": "string" },

我正在尝试对文档应用嵌套筛选器,但是,当我专门按其中一个嵌套属性进行筛选时,总是得到0个结果。例如,使用以下映射:

"PARTNER": {
   "properties": {
        "Addresses": {
             "properties": {
                    "CountyCode": {
                             "type": "string"
                    },
                    "EntityCode": {
                        "type": "string"
                    }, [...]
               }
        }, "type": "nested"
     }, [...]
}
我可以对CountyCode属性执行筛选,但如果我对EntityCode进行筛选,我总是得到零结果:

{
  "from": 0,
  "size": 10,
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": {
            "match_all": {}
          }
        }
      },
      "filter": {
        "nested": {
          "filter": {
            "term": {
              "EntityCode": "201"
            }
          },
          "path": "Addresses"
        }
      }
    }
  }
}
该查询得到的结果为零,如果我用CountyCode替换字段,它会给出正确的结果。 我正在ES 1.4.2上的基于web的控制台上执行查询

嵌套文档的格式为:

{
    "CountyCode": "516",
    "EntityCode": "203",
    [...]
}
知道为什么一个字段什么都不返回吗

谢谢

看起来您的
“类型”:“嵌套的”
声明位于错误的位置。它应该在
“Addresses”
块中。您可能还需要在
“nested”
过滤器中指定完整路径(尽管有时候ES足够聪明,如果嵌套字段不太多的话,可以不这样做)

为了测试,我创建了如下索引:

PUT /test_index
{
   "settings": {
      "number_of_shards": 1
   },
   "mappings": {
      "PARTNER": {
         "properties": {
            "Addresses": {
               "type": "nested",
               "properties": {
                  "CountyCode": {
                     "type": "string"
                  },
                  "EntityCode": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}
然后添加了几个文档:

POST /test_index/PARTNER/_bulk
{"index":{"_id":1}}
{"Addresses":[{"CountyCode": "516","EntityCode": "203"}, {"CountyCode": "516","EntityCode": "201"}]}
{"index":{"_id":2}}
{"Addresses":[{"CountyCode": "517","EntityCode": "204"}]}
现在,下面的查询将返回我所期望的结果:

POST /test_index/_search
{
   "from": 0,
   "size": 10,
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "nested": {
               "path": "Addresses",
               "filter": {
                  "term": {
                     "Addresses.EntityCode": "201"
                  }
               }
            }
         }
      }
   }
}
...
{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_index",
            "_type": "PARTNER",
            "_id": "1",
            "_score": 1,
            "_source": {
               "Addresses": [
                  {
                     "CountyCode": "516",
                     "EntityCode": "203"
                  },
                  {
                     "CountyCode": "516",
                     "EntityCode": "201"
                  }
               ]
            }
         }
      ]
   }
}
以下是我用来测试的所有代码:

你好,斯隆。映射是“手工制作”的,只是为了简化问题,嵌套类型定义实际上是地址的一个属性。无论如何,我缺少的是实际过滤器上的完整路径(我在不同的嵌套过滤器上有另一个EntityCode,但没有其他CountyCode,所以这应该是行为不同的原因)。非常感谢。