在Elasticsearch过滤器索引中查找特定查询

时间:2015-11-04 16:08:26

标签: elasticsearch elasticsearch-percolate

我正在尝试查找保存在Percolator Index中的特定查询。没有看到任何与之相关的文档。 其中一个SOF question有助于将所有查询保留在索引中。

我的一个示例查询保留在Percolator

curl -XPUT "http://localhost:9200/notifications/.percolator/1" -d'
{
  "query" : {
      "match" : {
        "tags" : "elasticsearch"
      }}
}'

和其他样本查询一样

curl -XPUT "http://localhost:9200/notifications/.percolator/4" -d'
{
"query" : {
    "bool": {
        "should": [
           { "term": {
              "tags": "Hbase"
                }
           },
            {  "term": {
                 "user": "abc"
              }
           }
        ]
        , "minimum_number_should_match": 1
    }
}
}'

有什么方法可以提取特定查询吗?根据上面的例子,我想找到一个与用户匹配的查询:“abc”

2 个答案:

答案 0 :(得分:1)

因此,如果我们刚刚将collection2.push(collection1[0]) 更新为2而不是1,那么我们将无法使用percolator API

minimum_should_match

获取您想要的查询。

这是一个想法:

基于Percolator Docs,存储在过滤器索引中的查询的默认映射是:

{
    "doc" : {
        "user" : "abc"
    }
}

您可以使用具有适当分析器的新字段更新此映射,该字段允许您以您希望的方式搜索查询,而无需提供文档来查找将返回文档的查询。这个新字段,比如{ ".percolator" : { "properties" : { "query" : { "type" : "object", "enabled" : false } } } } ,可以包含您使用过滤器索引查询时指定的查询的某种表示形式(类似于查询的JSON.stringify(查询)版本)。这将允许您使用如下查询查询过滤器索引:

custom_query_rep

当然这是一个非常简单的案例。该解决方案似乎有些局限,需要更多考虑更复杂的查询。

答案 1 :(得分:0)

由于Percolator类型被定义为动态,在将查询(文档)添加到Percolator时,我们可以将字段添加到搜索中。根据此信息,Sample query 1将变为

curl -XPUT "http://localhost:9200/notifications/.percolator/1" -d'
{
"query" : {
    "match" : {
        "tags" : "db"
    }
},
"tags" : "db"
}'

同样样本查询2将是

curl -XPUT "http://localhost:9200/notifications/.percolator/4" -d'
{
"query" : {
"bool": {
    "should": [
       {"term": {"tags": "Hbase"}},
       {"term": {"user": "abc"}}
    ]
    , "minimum_number_should_match": 1
  }}
 "tags": "hbase"
 "user": "abc" 
 }'

最后,我们会像往常一样查询

curl -XPOST "http://localhost:9200/notifications/.percolator/_search" -d'
{
"query": {
  "term": {
     "user": "abc"
  }
}
}'

这个解决方案对我有用。可能有更好的解决方案。想听听专家的意见。