使用grails中的elasticsearch查询嵌套字段

时间:2014-11-01 22:39:24

标签: grails elasticsearch gorm elasticsearch-plugin

我是elasticseach的新用户,我在向查询添加过滤器方面遇到了一些问题。

我的域类是这样的:

Class A {
    String name
    A_Status status

    static searchable =  {
        status component: true
    }
}

Class AImpl extends A {

}

Class A_Status {
    String name
    static searchable = { 
        root : false
        only = 'name'
    }
}

在我的控制器上,我正在进行的查询是:

def res = elasticSearchService.search()
{
    bool {
        must {
            term("status.name": "ACTIVE")
        }
    }
 }

我尝试将searchable字段更改为AImpl或放置"searchable = true",但结果相同,查询总是为空,应该得到4个结果。

我发现的另一个奇怪的事情是,进行uri搜索会给我预期的结果,但身体查询没有。

curl -XGET 'http://localhost:9200/com.sisconline.entities/_search?q=status.name=ACTIVE'

这有4次点击。

curl -XPOST 'http://localhost:9200/com.sisconline.entities/_search' -d '{
"query" : {
      "term":{ "status.name":"ACTIVE"}
      }
}'

这会得到0次点击。

我正在使用Grails 2.3.4elasticsearch plugin 0.0.3.5

问候。

1 个答案:

答案 0 :(得分:2)

我终于设法解决了问题:

must { 
  nested { 
     path = "status" 
     query { 
         bool { 
            must { 
               term("status.name": "active") } 
            } 
         } 
     } 
} 

希望它可以帮助他人。