2015-11-04 62 views
1

我正在尝试查找保存在Percolator索引中的特定查询。还没有看到有关它的任何文档。 其中一个SOF question有助于获取索引中所有持续存在的查询。在Elasticsearch percolator索引中查找特定查询

我的一个样本查询像

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

有什么办法,我可以拉一个特定的查询过滤咖啡

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

与其他样本查询坚持?基于上面的例子,我想找到一个与用户匹配的查询:“abc”

+0

你能举个例子吗?查询可能在您的percolator索引中,并描述了您想要如何找到它们? – eemp

+0

@eemp,我用一些样本更新了这个问题。让我知道我是否缺少任何东西。 –

回答

1

所以用你的例子,如果我们只是更新minimum_should_match为2而不是1,我们将无法使用percolator API

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

得到你想要的查询。

这里有一个想法:

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

{ 
    ".percolator" : { 
     "properties" : { 
      "query" : { 
       "type" : "object", 
       "enabled" : false 
      } 
     } 
    } 
} 

你可能会用适当的更新此映射一个新领域分析器,它将允许您以您想要的方式搜索查询,而无需提供文档以查找将返回文档的查询。这个新的字段,比如说custom_query_rep,可以包含查询的某种表示形式(类似于查询的JSON.stringify(查询)版本),您可以使用percolator为查询编制索引。这将让你与查询像查询过滤器指数:

{ 
    "query" : { 
     "bool" : { 
      "must" : [ 
       { "match" : { "custom_query_rep" : "user" } }, 
       { "match" : { "custom_query_rep" : "abc" } } 
      ] 
     } 
    } 
} 

当然,这是一个非常简单的例子。该解决方案似乎有点受限,并且需要更多的思考才能解决更复杂的查询问题。

+0

感谢您的建议。看起来,我想出了答案。对不起,但我将不得不发布答案。 –

0

由于Percolator类型被定义为动态,所以在向Percolator添加查询(这是文档)时,我们可以将这些字段添加到搜索上。基于这些信息,样品查询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" 
    } 
} 
}' 

该解决方案为我。可能会有更好的解决方案。想听听专家的意见。