Multimatch搜索多字查询

时间:2015-09-03 12:03:47

标签: elasticsearch

我希望实现一个MultiMatchQuery来搜索像“美国队长”这样的术语,其中数据存储为"firstname": "Captain""lastname":"America"

我目前有:

 MultiMatchQueryBuilder match = QueryBuilders.multiMatchQuery(
        text.toString(),
        "username",
        "firstname",
        "lastname"
    )
        .type(MatchQueryBuilder.Type.PHRASE_PREFIX)
        .operator(MatchQueryBuilder.Operator.AND);

但是,这不会返回任何结果。

1 个答案:

答案 0 :(得分:1)

您可能需要一个multi_match with cross_fields,因为它更符合您的使用案例。

Haven没有尝试过代码(它只是盲目地写了),但它应该起作用或至少显示整体想法:

 MultiMatchQueryBuilder match = QueryBuilders.multiMatchQuery(
        text.toString(),
        "username",
        "firstname",
        "lastname"
    )
        .type(MultiMatchQueryBuilder.Type.CROSS_FIELDS)
        .operator(MatchQueryBuilder.Operator.AND);