我正在尝试查找保存在Percolator索引中的特定查询。没有看到任何与此相关的文档。SOF问题之一有助于将所有查询持久化到索引中。
我的一个示例查询在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"
因此,在您的示例中,如果我们只是将minimum_should_match
更新为2而不是1,我们将无法使用具有的渗滤器API
{
"doc" : {
"user" : "abc"
}
}
以获取您想要的查询。
这里有一个想法:
基于Percolator Docs,存储在渗滤器索引中的查询的默认映射为:
{
".percolator" : {
"properties" : {
"query" : {
"type" : "object",
"enabled" : false
}
}
}
}
您可以使用一个带有适当分析器的新字段来更新此映射,该字段允许您以所需的方式搜索查询,而无需提供文档来查找将返回文档的查询。这个新字段,比如custom_query_rep
,可以包含查询的某种表示形式(类似于查询的JSON.stringfy(查询)版本),您可以在使用渗滤器对查询进行索引时指定该表示形式。这将允许您使用以下查询来查询渗滤器索引:
{
"query" : {
"bool" : {
"must" : [
{ "match" : { "custom_query_rep" : "user" } },
{ "match" : { "custom_query_rep" : "abc" } }
]
}
}
}
当然,这是一个非常简单的案例。该解决方案似乎有些有限,需要对更复杂的查询进行更多思考。
由于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"
}
}
}'
这个解决方案对我有效。也许还有更好的解决方案。希望听取专家的意见。