2015-11-04 94 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" 
    } 
} 
}' 

該解決方案爲我。可能會有更好的解決方案。想聽聽專家的意見。