elasticsearch简单应用-昵称搜索


一、创建索引
curl -XDELETE x.x.x.177:9200/$index

curl -XPOST x.x.x.x.177:9200/$index -d '{
    "mappings": {
        "user_baseinfo": {
            "properties": {
                "Experience": {
                    "type": "long"
                },
                "NickName": {
                    "store": true,
                    "analyzer": "ik",
                    "type": "string",
                    "fields": {
                        "raw": {
                            "index": "not_analyzed",
                            "store": true,
                            "type": "string"
                        }
                    }
                },
                "UserID": {
                    "type": "long"
                },
                "UserIDExt": {
                    "store": true,
                    "type": "long"
                }
            },
            "_all": {
                "enabled": true,
                "analyzer": "ik"
            }
        }
    }
}'


二、全库插入更新
Settings settings = Settings.settingsBuilder().put("cluster.name", ES_Server_Cluster_Name).build();


Client client = null; 
try {
    TransportClient transportClient = TransportClient.builder().settings(settings).build();
    String[] ipArr = ES_Server_IPs.split(","); for(String ipItemStr : ipArr) {
        String[] ipItem = ipItemStr.split(":");
        transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipItem[0]), Integer.parseInt(ipItem[1])));
    }
    client = transportClient;
} catch (UnknownHostException e) {
    _log.error(e, e.getMessage());



if(client == null){
    ret = -1; 
    return ret;
}
BulkRequestBuilder bulkRequest = client.prepareBulk(); 
int count = 0; 
while(rs.next()){ 
    long userID = rs.getLong("UserID"); 
    long userIDExt = rs.getLong("UserIDExt");
    String nickName = rs.getString("NickName"); 
    long experience = rs.getLong("Experience");
    UserSearchDomain domain = new UserSearchDomain();
    domain.setUserID(userID);
    domain.setUserIDExt(userIDExt);
    domain.setNickName(nickName);
    domain.setExperience(experience);
    bulkRequest.add(client.prepareIndex(UserSearch_Index, UserSearch_Type, domain.getUserID().toString()).setSource(domain.toJSONStr())
);
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
......

三、增量
Settings settings = Settings.settingsBuilder().put("cluster.name", ES_Server_Cluster_Name).build();

TransportClient transportClient = TransportClient.builder().settings(settings).build();
String[] ipArr = ES_Server_IPs.split(","); 
for(String ipItemStr : ipArr) {
    String[] ipItem = ipItemStr.split(":");
    transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipItem[0]), Integer.parseInt(ipItem[1])));
}
Client client = transportClient;
IndexResponse response_add = client.prepareIndex(UserSearch_Index, UserSearch_Type, domain.getUserID().toString()).setSource(domain.toJSONStr()).get();
client.close();

四、查找
Settings settings = Settings.settingsBuilder().put("cluster.name", ES_Server_Cluster_Name).build();

TransportClient transportClient = TransportClient.builder().settings(settings).build();
String[] ipArr = ES_Server_IPs.split(","); 
for(String ipItemStr : ipArr) {
    String[] ipItem = ipItemStr.split(":");
    transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipItem[0]), Integer.parseInt(ipItem[1])));
}
Client client = transportClient; //查询 

QueryBuilder queryBuilder = null;
Pattern pattern = Pattern.compile("[0-9]*"); 
if(pattern.matcher(keyword).matches()){
    queryBuilder = QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("NickName.raw", "*" + keyword + "*"))
        .should(QueryBuilders.termQuery("NickName.raw", keyword).boost(2f))
        .should(QueryBuilders.termQuery("UserIDExt", keyword).boost(5f));
}else{
    queryBuilder = QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("NickName.raw", "*" + keyword + "*"))
        .should(QueryBuilders.termQuery("NickName.raw", keyword).boost(2f));
}

SearchResponse response = client.prepareSearch(UserSearch_Index)
    .setTypes(UserSearch_Type)
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(queryBuilder)
    .addSort("_score", SortOrder.DESC)
    .addSort("Experience", SortOrder.DESC)
    .setFrom(from).setSize(size).setExplain(true)
    .execute()
    .actionGet();

List> users = new ArrayList<>();
SearchHit[] searchHists = response.getHits().getHits(); 
if(searchHists.length > 0){ 
    for(SearchHit hit:searchHists){
        String nickName = hit.getSource().get("NickName").toString();
        Long userID =  Long.valueOf(hit.getSource().get("UserID").toString());
        Map map = new HashMap<>();
        map.put("nickName", nickName);
        map.put("userID", userID);
        users.add(map);
    }
}
client.close();


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30980622/viewspace-2125643/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30980622/viewspace-2125643/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值