我是Elastic Search的新手。我想在我的搜索查询中包含多个字段,例如:
Title=my title and city=mycity or country = mycountry
如何使用java客户端执行此类查询?我试过这个
SearchResponse response = client.prepareSearch("titan")
.setTypes("vertex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.fieldQuery("title", "mytitle"))
.setQuery(QueryBuilders.fieldQuery("city", "mycity"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
但没有效果
答案 0 :(得分:1)
我相信你必须在那里做booleanQuery。
类似的东西:
SearchResponse response = client.prepareSearch("titan")
.setTypes("vertex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.fieldQuery("title", "mytitle"))
.should(QueryBuilders.fieldQuery("city", "mycity"))
.should(QueryBuilders.fieldQuery("country", "mycountry")))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
简而言之,布尔查询的规则是所有must
子句都应该是真的,并且should
子句中至少有一个条件是真的(应该是应该的数量)可以更改必须为true的子句,其中一个是默认值。