是否可以在不将特定数据加载到索引的情况下检查特定数据是否与查询匹配?

Is it possible to check that specific data matches the query without loading it to the index?

假设我有一个特定的数据字符串和一个特定的查询。检查查询是否与数据匹配的简单方法是将数据加载到 Elastic 索引中并 运行 在线查询。但是我可以不把它放入索引吗?

也许有一些开源库可以离线实现弹性搜索功能,所以我可以调用getScore(data, query)之类的东西?或者可以通过使用特定的 API 端点来实现?

提前致谢!

您可以利用 percolator type

这允许您存储查询而不是文档,然后测试文档是否与存储的查询匹配。

例如,您首先创建一个索引,其中包含一个 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 query 检查您刚刚存储的查询是否匹配

GET /my_index/_search
{
    "query" : {
        "percolate" : {
            "field" : "query",
            "document" : {
                "message" : "A new bonsai tree in the office"
            }
        }
    }
}

所以你需要做的就是只存储查询(而不是文档),然后你可以使用 percolate 查询来检查你存储的查询是否选择了文档,无需自己存储文档。