查询嵌套对象不起作用

时间:2016-01-28 02:40:48

标签: elasticsearch

这是一个非常基本的问题,但我在查询中找不到什么问题。

映射:

     {
       "typeName": {
         "properties": {
             "active": {
                "type": "boolean"
             },
             "id": {
                "type": "string",
                "index": "not_analyzed"
             },
             "values": {
                "type": "nested",
                "properties": {
                "by": {
                    "type": "string",
                    "analyzer": "english"
                 },
                 "idChatRoom": {
                    "type": "string",
                    "analyzer": "english"
                 },
                 "message": {
                    "type": "string",
                    "analyzer": "english"
                 }
             }
          }
       }

正如您所看到的,有一个名为“values”的嵌套对象。如果我尝试运行以下查询:

     GET plugg_co/chatmessage_50813808/_search
     { 
       query: { 
          nested: {
             path: "values",
                query: {
                  filtered: {
                     filter: {
                        term: { "values.idChatRoom": "id-123" }
                     }
                  }
               }
            }
         }
     }

我没有得到任何结果(索引不是空的!我检查了!)。任何的想法?

谢谢

1 个答案:

答案 0 :(得分:0)

嵌套查询没有问题。嵌套查询很好。但由于idChatRoomanalyzed,因此您不应该使用term query。相反,您应该使用match query。将您的查询更改为:

GET plugg_co/chatmessage_50813808/_search
{
"query": {
  "nested": {
     "path": "values",
     "query": {
        "match": {
           "values.idChatRoom": "id-123"
        }
      }
    }
  } 
 }

如果您想使用term query,可以不对其进行分析或multifield。有关multifield的更多信息,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/2.x/_multi_fields.html 希望它有所帮助。