我正在尝试查找保存在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”
答案 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"
}
}
}'
这个解决方案对我有用。可能有更好的解决方案。想听听专家的意见。