我正在尝试创建一个正则表达式查询,该查询将搜索我拥有的美元范围内容。
这是符合以下格式的项目:$ xxx,xxx.xx - $ xxx,xxx.xx
请注意,我希望这有点失败。唯一的要求是捕获字符串必须始终以'$'开头,后面带有数字(逗号可选),并且包含' - '分隔另一组相同格式的数字(以$开头)。
虽然我找到了一个能够满足这一要求的正则表达式,并且我相信我已经使用了弹性搜索语法,但我似乎无法获得任何结果。我知道它应该根据我对被查询数据集的了解来查找结果。
以下是查询,如果有人可以帮我弄清楚出了什么问题,或者我应该做些什么,我将不胜感激!谢谢!
GET _search
{
"query": {
"regexp": {
"_content": {
"value": "$?<1-9>{1,}(,?<0-9>{1,3})+ *- *$?<1-9>{1,}(,?<0-9>{1,3})+",
"flags": "INTERVAL"
}
}
}
}
答案 0 :(得分:0)
我手边没有Elasticsearch实例,但以下内容应符合您的美元范围:
GET _search
{
"query": {
"regexp": {
"_content": {
"value": "\$[1-9][0-9]*((,|\.)[0-9]{1,3})+ *- *\$[1-9][0-9]*((,|\.)[0-9]{1,3})+"
}
}
}
}
间隔期正如WiktorStribiżew所说,你错误地使用了间隔选项,AFAIK没有采用量词。您可以使用间隔,但这里简单的数值范围也可以。 [1-9][0-9]
匹配一个至少有1位数的数字,而不是以0开头。
量词 {1,}
可以写成+
。由于我正在提取第一个范围以匹配任何数字但零,我应该使用{0,}
或其等价物:*
。
美元符号正如我所说,你需要摆脱美元符号。这些是表示字符串结尾的特殊符号。
点分隔符每组2-3位数字可以用逗号或点分隔。 (,|\.)
与两者都匹配。
答案 1 :(得分:0)
对于那些将来可能遇到类似问题的人:
我的正则表达式不正确,而是使用错误的标记生成器索引项目。用于弹性搜索的标准标记生成器剥离了$和 - 以及其他特殊字符。经过一些定制后,我设法得到一个可以返回预期结果的reg ex。这是我使用的最终查询:
GET pdfs3/pdf/_search
{
"query": {
"regexp": {
"_content": "($[1-9][0-9]{0,2}(,[0-9]{3})+-$[1-9][0-9]{0,2}(,[0-9]{3}))"
}
}
}