2
我是elasticseach
的新手,我有一些问题需要在我的查询中添加过滤器。在grails中用弹性搜索查询嵌套字段
我的领域类是这样的:
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.4
和elasticsearch plugin 0.0.3.5
。
问候。
您是否尝试使用您的域进行搜索? 我有类似的映射(甚至几乎相同),并面临的问题,当我尝试搜索AImpl,fe 'AImpl.search(“$ {query}”)'有一个例外在tomcat 'ERROR unmarshall.DomainClassUnmarshaller - 使用ID解组类AImpl时出错... 消息:属性AImpl.status未映射为[组件],但找到了打破的搜索命中。 ' 另外,如果我尝试通过超进行搜索,像 'A.search(“$ {查询}”)' 我接收不到任何结果,似乎什么也没有编入索引的A. – 2014-11-07 20:50:31
@JulyAntonicheva从我到目前为止,我们已经看到框架将索引子类而不是父类,所以如果您尝试通过父类进行搜索,您将无法获得任何结果。实际上,我必须在我的所有子类中编写可搜索的闭包,也许有一个我没有看到的配置参数。我没有查询使用我的域名,因为我想要所有可能的结果。 – santi2332 2014-11-08 22:49:30
@JulyAntonicheva关于你遇到的错误,可能是你没有指定你的属性作为一个组件,在我的例子中是“status component:true”,或者你改变了你的映射并且没有清理你的索引来重建它。 – santi2332 2014-11-08 22:54:52