弹性搜索:在查询中包含多个字段

时间:2014-05-17 10:07:46

标签: elasticsearch

我是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();

但没有效果

1 个答案:

答案 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的子句,其中一个是默认值。