Elasticsearch使用API心得

Elasticsearch

Elasticsearch官方API文档

1.建立连接

  • java api使用搜索的时候,必须先进行连接,在直接url的时候是端口9200,但是在使用程序的时候为9300,如下所示,建立客户端的连接,在connection类里面给出初始化函数
private static void open()  
    {  
            Settings settings = Settings.settingsBuilder()  
                    .put("cluster.name", "molong").build();  

            try {  
                client =  TransportClient.builder().settings(settings).build()  
                        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));  
            } catch (UnknownHostException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

    }  
2.进行查询
  • 查询的时候,需要建立一个SearchRequestBuilder,这里面将给出对于哪一个index或者type进行查询,并且所有的设置都可以在这里面进行实现,例如模糊查询,范围查询,前缀查询等
SearchRequestBuilder responsebuilder = client.prepareSearch("index").setTypes("type")  
  • 上述代码的意思是对于index的type进行查询,其中client即使得到的建立链接,下一步就是要将查询词给进去
SearchResponse myresponse=responsebuilder.setQuery(QueryBuilders.matchPhraseQuery("title", "molong1208 blog")).setFrom(0).setSize(10).setExplain(true).execute().actionGet();  
  • 上述代码就是讲所要查询的词塞进去,其中setfrom,setsize是指一页显示的多少,从第几个开始,显示size个数据
3.展示

SearchHits hits = myresponse.getHits();  
for (int i = 0; i < hits.getHits().length; i++) {  
           System.out.println(hits.getHits()[i].getSourceAsString());}   
  • 其中还可以使用hits.getHits()[i].getSource(),这是一个map的格式,可以将具体要展示的进行展示出来
3.展示
  • 读DSL的时候查询有很多的查询,比如说多域,比如说过滤等查询条件,其中很多形式不同的之处只是上述塞查询词时候的setQuery里面的不同,所以在此只是讲述里面的函数不同

1.基本查询

responsebuilder.setQuery(QueryBuilders.matchPhraseQuery("title", "molong1208"))     
tiele:为Elastic中索引字段  molong1208:为需要查询的东西

2.多条件查询

responsebuilder.setQuery(QueryBuilders.termsQuery("title", "molong1208","blog","csdn"))  
molong1208,blog,csdn在title字段进行查询,如果有三者中的任意一个即算匹配

3. match_all查询(匹配所有)

responsebuilder.setQuery(QueryBuilders.matchAllQuery())  

4.常用词查询

responsebuilder.setQuery(QueryBuilders.commonTermsQuery("name", "lishici"))  
与1. 基本查询matchPhraseQuery(String name, Object text)类似

5. multi_match查询

responsebuilder.setQuery(QueryBuilders.multiMatchQuery("lishi", "subcat","name"))   
multiMatchQuery(text,fields)其中的fields是字段的名字,可以写好几个,每一个中间用逗号分隔

6. multi_match查询

responsebuilder.setQuery(QueryBuilders.multiMatchQuery("lishi", "subcat","name"))   
multiMatchQuery(text,fields)其中的fields是字段的名字,可以写好几个,每一个中间用逗号分隔

7. rang查询

responsebuilder.setQuery(QueryBuilders.rangeQuery("age").gt(10).lt(20))     
对于某一个field,大于多少,小于多少

8. 正则表达式查询

responsebuilder.setQuery(QueryBuilders.regexpQuery(field, regexp))      
  1. bool查询
    • 有些时候可能我们所想要的为比较复杂的查询,例如想要查一个在某个字段必须有某个值,并且另一个字段必须有另外一个值的情况,这种时候就可以使用bool查询
responsebuilder.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.multiMatchQuery(query, "name","title","title_1")).must(QueryBuilders.multiMatchQuery(query2, "title2","title3")))       
在title或者title_1或者name字段有query,并且在title2或者title3字段有query2的结果召回来
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值