regex - 基于Elasticsearch字符串的查询以匹配正则表达式

标签 regex elasticsearch elasticsearch-query

我想知道是否可以进行基于字符串的查询以匹配Elasticsearch中的正则表达式。

我知道还有另一种方法(进行正则表达式查询以匹配Elasticsearch文档中的字符串),但是我可以基于字符串进行查询并使用Elasticsearch匹配文档中保存的正则表达式吗?

例如,我有一个包含数据的文档,其中包括输入(正则表达式)和输出(描述正则表达式),如下所示:

{
  "input": "[0-9]+ ?kg",
  "output": "weight"
}

我可以使用字符串“67kg”进行查询以匹配正则表达式并获取以下内容:
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test1",
        "_type" : "type",
        "_id" : "XqXucGgBXOzlaMdqiLcI",
        "_score" : 1.0,
        "_source" : {
          "input" : "[0-9]+ ?kg",
          "output" : "weight"
        }
      }
    ]
  }
}

最佳答案

您可以使用Percolate Query 功能实现类似的功能。

基本上的想法是,您的文档就是查询,您可以将它们与您的文档一起搜索以查看这些文档是否匹配。

您需要使用特殊字段类型percolator创建索引。例如,

PUT /my-index
{
    "mappings": {
        "_doc": {
            "properties": {
                "input": {
                    "type": "keyword"
                },
                "query": {
                    "type": "percolator"
                }
            }
        }
    }
}

在此之后,添加一个文档(该查询将使您的字段input与一个正则表达式匹配)

例如,
PUT /my-index/_doc/1
{
    "query" : {
        "regexp" : {
            "input" : "[0-9]+( kg)?"
        }
    }
}

另外,例如,您可以根据需要在此处尝试其他查询。

完成这一步之后,执行以下操作,测试您的文档如何再次匹配哪个查询:
GET /my-index/_search
{
    "query" : {
        "percolate" : {
            "field" : "query",
            "document" : {
                "input" : "67 kg"
            }
        }
    }
}

关于regex - 基于Elasticsearch字符串的查询以匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54306208/

相关文章:

c# - 用于验证文件名的正则表达式

elasticsearch - 在 Elasticsearch 中忽略重复项

elasticsearch - 如何从ES查询中了解ES索引?

elasticsearch - ElasticSearch-过滤从嵌套查询返回的数据

c# - 有效地从多行字符串中删除所有空白行

javascript - 从 char 到 char 的正则表达式选择由字符分隔的间隔

c# - 正则表达式 - 匹配不匹配字母字符子集的字母字符 (C#)

java - 测试容器在等待容器端口打开时超时,使用 Elasticsearch docker 镜像

elasticsearch - packetbeat没有捕获大的HTTP POST数据包

elasticsearch - 解决 Elasticsearch 中奇怪的数据检索问题的好的方法是什么?