2014-09-13 14 views
0

我正在尋找一種方法來重新使用Java中的ElasticSearch/Lucene中的過濾器語法和邏輯在任意文檔上(不需要先索引它們)。重新使用ElasticSearch過濾器來測試內存中的對象

比方說,我有一個JSON對象

{"wheels":4} 

和過濾器:

{"exists":{"field":"windows"}} 

對象未在任何索引,是否有可能重新使用ElasticSearch/Lucene的過濾器來測試沒有(或之前)插入到索引過濾器文件(在這種情況下返回false)?

回答

0

是的,你可以,該功能被稱爲滲濾器中的Elasticsearch:

​​

您使用滲濾液API登記Elasticsearch搜索,然後你滲透文檔通它。它返回的地方是否有匹配。該示例語法下面是從文檔拍攝 - 它應該給你如何才能建立這個部落是一個好主意:

使用範例

與現場消息映射創建索引:

curl -XPUT 'localhost:9200/my-index' -d '{ 
    "mappings": { 
    "my-type": { 
     "properties": { 
     "message": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

註冊在過濾器的查詢:

curl -XPUT 'localhost:9200/my-index/.percolator/1' -d '{ 
    "query" : { 
     "match" : { 
      "message" : "bonsai tree" 
     } 
    } 
}' 

匹配的文件已註冊的過濾器查詢:

curl -XGET 'localhost:9200/my-index/message/_percolate' -d '{ 
    "doc" : { 
     "message" : "A new bonsai tree in the office" 
    } 
}' 

上述請求將產生以下反應:

當然
{ 
    "took" : 19, 
    "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
    }, 
    "total" : 1, 
    "matches" : [ 
     { 
      "_index" : "my-index", 
      "_id" : "1" 
     } 
    ] 
} 
+0

嗯,爲什麼沒有想到這裏perculator的?我認爲這樣做,但理想情況下(我正在尋找的方向)將會有一個更輕量級的解決方案,使用lucene內部結構來測試簡單的過濾器(即存在,丟失,地理位置,範圍)而不觸及索引。我看到perculator爲單個文檔創建了一個內存中索引來執行查詢(並且您需要註冊該查詢) - 對此仍然有點沉重。有什麼建議麼?我會看看perculator的內部。 – Yousef 2014-09-14 17:17:41

+0

好吧,您可以始終使用直接從Java調用的Lucene庫,但它不會重複使用Elasticsearch中的任何內容 - 您必須單獨設置它。 – 2014-09-14 19:09:23

+0

是我正在看的方向。任何起點可能用於測試文檔/過濾器?或者考慮到JSON對象需要首先映射到lucene文檔等,您認爲這會過於複雜嗎? – Yousef 2014-09-14 19:31:02