java中的Elasticsearch查询不能正确工作-语法错误吗?

qyyhg6bp  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(2)|浏览(124)

没有找到答案,但这是我的情况:
QueryBuilders.regexpQuery("regexExpression","\\-?*[0-9]3475[0-9]6") ;
QueryBuilders.simpleQueryStringQuery("\\-?*2347566);
我运行的两个查询和simplequery都返回2347566(带或不带“-”),但正则表达式查询不返回任何内容。我为regex查询打印出的值是-?[0-9]3475[0-9]6正确。
有人知道为什么会这样吗?我也把旗设为“全部”。
为了澄清,我有一个电话号码的数据库,可以有+,#作为前缀,用户可以输入这些字符,
和数字在搜索领域。搜索应该忽略搜索中所有+,#的示例,这样如果我在数据库中有+123,123搜索将返回该结果,或者+123也应该返回相同的结果,因为我将+视为通配符,所以出现0或1次。
例如,+123 * 45 * 应该返回123[0-9]45[0-9],有或没有+(或其他出现)。
我试过使用正则表达式搜索纯粹的 * 像234**789,当我知道有很多电话号码,可以找到,如果我使用完全匹配,如23456789或23477789。但是当我只在 * 或[0-9]上使用正则表达式搜索时,即使正则表达式搜索的值是234[0-9][0 -9]789,它也不会返回任何结果。

ssm49v7z

ssm49v7z1#

最后,我使用了错误的字段进行查询,我认为是在那里。不得不在所有领域搜索才能得到一些结果。

h7appiyu

h7appiyu2#

Wikipedia中有很多关于正则表达式语法的文档。

  • 维基百科-正则表达式-语法 *。

你的图案有几处错误。
首先,只有当连字符在一个 * 字符类 * 中,并且不是第一个或唯一的字符,或者出现在最后一个范围之后时,才需要转义连字符。
因此,它试图匹配以 ** 字符开头的值。

  • "...我已经尝试使用正则表达式进行搜索,其中包含纯粹的 ,例如234**789..."

在正则表达式语法中,* 字符是一个量词,而不是大多数Unix语法将其识别为通配符。
你要找的元字符是点字符,dots.php
尝试以下模式,看看结果是否有所改善。

-?.[0-9]3475[0-9]6

此外,您可以选择使用 \d 语法来表示 [0-9]

-?.\d3475\d6

最后一点,你提到

  • "...电话号码可以有+,#作为前缀..."*

这不就意味着模式应该是

[+#]?\d3475\d6

相关问题