基于 Elasticsearch 字符串的查询以匹配正则表达式
Elasticsearch string based query to match a regular expression
我想知道是否可以进行基于字符串的查询来匹配 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"
}
}
}
}
我想知道是否可以进行基于字符串的查询来匹配 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"
}
}
}
}