1

我一直在使用 Spring 和 HBase 等技术开发我的第一个 RESTful 服务器。

Message以下是我的服务器的核心模型;

@AllArgsConstructor
@Getter
public class Message {

    private final String from;

    private final String to;

    private final long when;

}

我的服务器应该在 HBase 中保存和查找消息。

我已经进行了研究并阅读了此文档:https ://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/reference/html/springandhadoop-hbase.html#data-access-object-dao-支持

然而,这还不够。本教程没有公开如何按特定列查找。

您能否提供一个代码片段,根据以下查询从 HBase 检索消息?

SELECT from, to, when FROM Message WHERE to = {userId} OR from = {userId}
4

1 回答 1

1

有一个示例可以进行基于列的查询,如下所示:

Scan scan = new Scan();
scan.addColumn(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
                Bytes.toBytes(columnName));
        Filter filter = new SingleColumnValueFilter(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
                Bytes.toBytes(columnName), CompareOp.EQUAL, Bytes.toBytes(columnValue));
        scan.setFilter(filter);

        List<String> rows  =
        hbaseTemplate.find("searchclicks", scan, new RowMapper<String>() {
            @Override
            public String mapRow(Result result, int rowNum) throws Exception {
                byte[] value = result.getValue(
                        HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
                        Bytes.toBytes(columnName));
                if (value != null) {
                    String facetValue = new String(value);
                    LOG.debug("Facet field: {} and Facet Value: {}",
                            new Object[] { columnName, facetValue });
                }
                return facetValue;
            }
        });

您可以参考此获取更多示例:
https ://www.programcreek.com/java-api-examples/?code=jaibeermalik/searchanalytics-bigdata/searchanalytics-bigdata-master/src/main/java/org/jai/hbase /HbaseServiceImpl.java

于 2019-01-21T22:30:11.613 回答