我正在寻找一种方法在ElasticSearch / Lucene中重用任意文档中的过滤器语法和逻辑(无需首先将它们编入索引)。
我们说我有一个JSON对象
{"wheels":4}
过滤器:
{"exists":{"field":"windows"}}
对象不在任何索引中,是否可以重用ElasticSearch / Lucene过滤器来测试过滤器上的文档,而不是(或之前)将其插入索引(在这种情况下返回false)?
答案 0 :(得分:0)
是的,你可以,这个功能在Elasticsearch中被称为Percolator:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-percolate.html
您使用percolate 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" } ] }