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

问题描述 投票:1回答:1

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

也许有一些开源库可以离线实现Elastic搜索功能,这样我就可以调用类似getScore(data,query)的功能?或者可以通过使用特定的API端点来实现?

先谢谢了!

elasticsearch full-text-search offline
1个回答
1
投票

你可以做的是利用 渗滤器型.

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

例如,你首先创建一个索引,其字段类型为 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 查询来检查文档是否会被您存储的查询所选择,而无需存储文档本身。

© www.soinside.com 2019 - 2024. All rights reserved.