如何在 Elasticsearch 中进行屏蔽查询?

How to do a masked query in Elasticsearch?

例如,我将用户护照存储在 Elasticsearch 中。它们存储为以下格式的连续字母和数字:AADDDDDDD。 2 个字母,然后是 7 个数字。

用户对可以提及特定职位的特定值的搜索感兴趣。例如,我想搜索所有以'A'开头,第三个位置为'7',最后一个位置为'0'的护照号码。像这样:

A-7----0

如何为此生成高效的查询?我需要为此创建任何自定义分析器吗?

到目前为止,我所做的是在字符之间插入 space,然后搜索索引位置,这对我来说似乎是一项代价高昂的操作。

您需要多高的查询效率?如果你的数据不是很大你可以尝试正则表达式查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html

其他建议将使用带有符号数组及其位置的文档。例如

   {
        'code' : [
           {'pos':1, 'symbol':A},{'pos':2, 'symbol':B}, ...
        ]
    } 

那你就可以使用bool过滤器,高效的使用过滤器缓存