2

我是新手,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或 put "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

问候。

4

1 回答 1

2

我终于设法通过这样做来解决问题:

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

希望它可以帮助别人。

于 2014-11-02T00:12:57.113 回答