Elasticsearch的javaAPI之percolator

percolator允许一个在index中注册queries,然后发送包含doc的请求,返回得到在index中注册过的并且匹配doc的query

//This is the query we‘re registering in the percolator
QueryBuilder qb = termQuery("content", "amazing");

//Index the query = register it in the percolator
client.prepareIndex("myIndexName", ".percolator", "myDesignatedQueryName")
    .setSource(jsonBuilder()
        .startObject()
            .field("query", qb) // Register the query
        .endObject())
    .setRefresh(true) // Needed when the query shall be available immediately
    .execute().actionGet();

在上面的index中query名为myDesignatedQueryName

为了检查文档注册查询,使用这个 代码:

//Build a document to check against the percolator
XContentBuilder docBuilder = XContentFactory.jsonBuilder().startObject();
docBuilder.field("doc").startObject(); //This is needed to designate the document
docBuilder.field("content", "This is amazing!");
docBuilder.endObject(); //End of the doc field
docBuilder.endObject(); //End of the JSON root object
//Percolate
PercolateResponse response = client.preparePercolate()
                        .setIndices("myIndexName")
                        .setDocumentType("myDocumentType")
                        .setSource(docBuilder).execute().actionGet();
//Iterate over the results
for(PercolateResponse.Match match : response) {
    //Handle the result which is the name of
    //the query in the percolator
}

 

传统设计基于数据的documents,并将它们存储到一个index中,然后通过搜索api定义的查询,获取这些documents。Percolator正好相反,首先你储存到一个查询到index,然后通过percolatorapi以获取这些查询。

查询可以存储的原因来自这样一个事实:在Elasticsearch中document和query都定义为json格式。这允许您通过index api将query嵌入到document中。 Elasticsearch可以依赖percolator,通过document来提取查询。 既然document也定义为json,您可以定义一个percolator在document的请求中。

percolator和它的大部分功能在实时工作,所以percolator query被存入,那么久可以使用percolator

根据mapping,创建一个index, field:message

curl -XPUT ‘localhost:9200/my-index‘ -d ‘{
  "mappings": {
    "my-type": {
      "properties": {
        "message": {
          "type": "string"
        }
      }
    }
  }
}
注册一个query到percolator中:
curl -XPUT ‘localhost:9200/my-index/.percolator/1‘ -d ‘{
    "query" : {
        "match" : {
            "message" : "bonsai tree"
        }
    }
}‘

用一个符合注册的percolator query的document:

curl -XGET ‘localhost:9200/my-index/message/_percolate‘ -d ‘{
    "doc" : {
        "message" : "A new bonsai tree in the office"
    }
}‘

上面的请求将返回下面的信息:

{
    "took" : 19,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "total" : 1,
    "matches" : [
        {
          "_index" : "my-index",
          "_id" : "1"
        }
    ]
}

原文地址:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-percolate.html#search-percolate

http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/percolate.html

翻译欠佳,希望不会对大家造成误解

时间: 2024-11-15 02:15:51

Elasticsearch的javaAPI之percolator的相关文章

elasticsearch的javaAPI之index

Index API 原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index_.html index API允许你将JSON document转换为一个特定的index,使它便于搜索操作. 生成JSON文档: 有几种不同的方法生成一个JSON document: 手动使用 byte[] 或String 使用一个map来等效转换为JSON 使用第三方库来将beans装换(如Jackson

elasticsearch的javaAPI之query

elasticsearch的javaAPI之query API the Search API允许执行一个搜索查询,返回一个与查询匹配的结果(hits). 它可以在跨一个或多个index上执行, 或者一个或多个types. 查询可以使用提供的 query Java API 或filter Java API . 搜索请求的主体是建立使用 SearchSourceBuilder上. 这里有一个例子: import org.elasticsearch.action.search.SearchRespon

Elasticsearch的javaAPI之facet,count,delete by query

Elasticsearch的javaAPI之count count API允许轻松地执行一个查询,获得匹配的数量,可以跨越一个或多个index ,一个或多个type. import static org.elasticsearch.index.query.xcontent.FilterBuilders.*; import static org.elasticsearch.index.query.xcontent.QueryBuilders.*; CountResponse response =

Elasticsearch的javaAPI之get,delete,bulk

Elsasticsearch的javaAPI之get get API允许根据其id获得指定index中的基于json document.下面的例子得到一个JSON document(index为twitter,type为tweet,id为价值1) GetResponse response = client.prepareGet("twitter", "tweet", "1")         .execute()         .actionG

ElasticSearch的javaAPI之Client

翻译的原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#node-client 翻译ElasticSearch的javaAPI之Client 本节描述了elasticsearch提供的Java API,所有elasticsearch操作使用client对象执行. 所有的操作在本质上是完全asynchronous(接受一个listener,或返回一个future).

Elasticsearch的javaAPI之query dsl-queries

和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者(factory)是 QueryBuilders . 一旦准备好您的查询,您可以使用query api. 如何使用QueryBuilders?仅仅就是加入下面的包: import org.elasticsearch.index.query.QueryBuilders.*; 请注意,您可以轻松地打印(又名调试) 查询生成的JSON,用 toString()方法 QueryBuil

Elasticsearch的javaAPI之Query DSL-filters

和REST query dsl一样,elasticsearch提供了一个完整的Java query dsl. 工厂过滤器建造者是FilterBuilders 一旦准备好您的查询,就可以使用query api. 如何构建查询?使用FilterBuilders,导入它们在你的类: import org.elasticsearch.index.query.FilterBuilders.*; 请注意,在FilterBuilder对象上可以轻松地打印(又名调试) 查询生成的JSON,用 toString(

ElasticSearch的基本用法与集群搭建

ElasticSearch的基本用法与集群搭建 一.简介 ElasticSearch和Solr都是基于Lucene的搜索引擎,不过ElasticSearch天生支持分布式,而Solr是4.0版本后的SolrCloud才是分布式版本,Solr的分布式支持需要ZooKeeper的支持. 这里有一个详细的ElasticSearch和Solr的对比:http://solr-vs-elasticsearch.com/ 二.基本用法 Elasticsearch集群可以包含多个索引(indices),每一个索

ElasticSearch Java api 详解_V1.0

原英文文档:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/index.html (各个版本的api) Search部分: 查询有两种方法:query Java API和filter Java API 首先看一个例子: import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.Se