public static void main(String[] args) throws Exception {
Client client =null;
try {
Settings settings =Settings.settingsBuilder().put("cluster.name","Cluster").put("client.transport.sniff", true).build();
client =TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.20.139"),9300));
QueryBuilder qb1 = QueryBuilders.matchPhrasePrefixQuery("nickname","北");
SearchResponse searchResponse = client.prepareSearch("wanbu")//wanbu:index名
.setTypes("wanbudatauser").setSearchType(SearchType.DFS_QUERY_THEN_FETCH)//wanbudatauser:type名
.setQuery(qb1).setFrom(0).setSize(50).get();
SearchHits hits = searchResponse.getHits();
for (SearchHit searchHit : hits) {
System.out.println(searchHit.getId()+":"+searchHit.getSourceAsString());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
client.close();
}
}
1.使用matchPhrasePrefixQuery可以避免对搜索的词语分词去查询。。
解决问题:1.避免搜索到的内容过多,只会搜索到大于等于的信息。如搜索 北风 只会找到 北风/北风吹/北风冷....;不会搜索到北或者风等杂乱信息
2.解决term搜索 有写词无法搜索到的问题。怀疑是term还是利用了分词器