zoukankan      html  css  js  c++  java
  • elasticsearch的percolator操作

      es的普通查询是通过某些条件来查询满足的文档,percolator则不同,先是注册一些条件,然后查询一条文档是否满足其中的某些条件。

         es的percolator特性在数据分类、数据路由、事件监控和预警方面都有很好的应用。

           第一步是建立名为percolate的索引,包含一个字段message  

    curl -XPUT 'localhost:9200/percolate' -d'{
         "mappings":{
              "my_type":{
                  "properties":{
                       "message":{
                            "type":"string"
                        }
                  }
              }
          }
    }'

           第二步,注册一个percolator查询

           第三步,构建查询

           第四步,查看是否有匹配的条件

           第二步到第四步的代码如下,代码基于es 2.1版本:

    QueryBuilder qb = QueryBuilders.termQuery("message", "bonsai");
        try {
            //Index the query = register it in the percolator
            //把查询条件添加到索引中,myDesignatedQueryName为定义的查询名 
            client.prepareIndex("percolate", ".percolator", "myDesignatedQueryName")
                .setSource( XContentFactory.jsonBuilder()
                    .startObject()
                        // Register the query,添加查询记录
                        .field("query", qb) 
                    .endObject())
                .setRefresh(true) // Needed when the query shall be available immediately
                .execute().actionGet();
            //上面的term查询定义名为:myDesignatedQueryName       
    
            
            XContentBuilder docBuilder = XContentFactory.jsonBuilder().startObject();
            //This is needed to designate the document
            docBuilder.field("doc").startObject(); 
            docBuilder.field("message", "A new bonsai tree in the office");
            docBuilder.endObject(); 
            docBuilder.endObject(); 
    
            //Percolate查询
            PercolateResponse response = client.preparePercolate()
                                    .setIndices("percolate")
                                    .setDocumentType("message")
                                 .setSource(docBuilder).execute().actionGet();
    
           //获取查询query后处理逻辑
            for(PercolateResponse.Match match : response) {
                //创建percolate时指定的ID,根据查询ID在做相应的操作
                System.out.println("percolate ID: "+match.getId());
                System.out.println("percolate Index Name: " +match.getIndex());
            }       
        } catch (ElasticsearchException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

           输出结果为:

    percolate ID: myDesignatedQueryName
    percolate Index Name: percolate
  • 相关阅读:
    如何在markdown隐藏代码块
    html基础
    驻留机制
    字典
    echarts简单使用
    selenium的基本操作
    Excel上传、下载、models 自定义字段、批量执行(可选)
    django之自定义标签(路径url反向解码)
    邮件自动生成发送用例报告
    前台获取后台保存的数据
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/6771420.html
Copyright © 2011-2022 走看看