想象一下,我有一个特定的数据字符串和一个特定的查询。检查查询是否与数据匹配的简单方法是将数据加载到Elastic索引中并运行在线查询。但是我可以不把它放入索引中吗?
也许有一些开源库可以离线实现Elastic搜索功能,这样我就可以调用类似getScore(data,query)的功能?或者可以通过使用特定的API端点来实现?
先谢谢了!
你可以做的是利用 渗滤器型.
这允许你做的是存储查询而不是文档,然后测试文档是否会匹配存储的查询。
例如,你首先创建一个索引,其字段类型为 percolator
将包含您的查询(您还需要在映射中添加查询使用的任何字段,以便ES知道它们的类型)。
PUT my_index
{
"mappings": {
"properties": {
"query": {
"type": "percolator"
},
"message": {
"type": "text"
}
}
}
}
然后你就可以建立一个真正的查询索引,像这样。
PUT my_index/_doc/match_value
{
"query" : {
"match" : {
"message" : "bonsai tree"
}
}
}
最后,你可以使用 percolate
疑问 如果您刚才存储的查询符合
GET /my_index/_search
{
"query" : {
"percolate" : {
"field" : "query",
"document" : {
"message" : "A new bonsai tree in the office"
}
}
}
}
所以你需要做的就是只存储查询(而不是文档),然后你可以使用 percolate
查询来检查文档是否会被您存储的查询所选择,而无需存储文档本身。