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



我正在尝试查找保存在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"
  }
}
}'

这个解决方案对我有效。也许还有更好的解决方案。希望听取专家的意见。

相关内容

  • 没有找到相关文章

最新更新