我有一个输入的电话号码,其中可能包括-,+或字母。我想为Range查询提供该值的数字版本。因此,我能够将+233-333-3444解析为2333333444,当我使用“phone-num.parsedValue = 23333334444”进行“匹配查询”时,我收到了结果。
"phone-num": {
"text",
"fields": {
"parsedValue": {
"analyzer": "phone-analyzer",
"type":"text"
}}}
当我试图做一个范围查询时:
"query":{
"range":{
"phone-num.parsedValue":{
"from":1,
"to": 2333333444,
"include_lower":true,
"include_upper":true }}}
我得到0个结果。我很确定这是因为值是字符串。问题是我不知道如何质疑它。我尝试了“copy_to”和“fields within fields”,但都不起作用。有没有办法:
1.根据我的“parsedValue”结果保存另一个值,并保存足够长的时间,以便我可以搜索它
1.如果我不能在Map部分完成,那么作为查询的一部分进行解析呢?
因此,要回顾-我想执行范围查询传入的电话号码与非数字值。我确实用自定义分析器过滤了它以删除非数字,但由于结果值仍然是字符串,因此无法对其进行搜索。
1条答案
按热度按时间kqhtkvqz1#
相反,我会将解析后的值字段作为关键字字段保留,并对其使用范围查询。
下面是您可以使用的Map示例:
这将在您的phone-num字段上创建一个名为“digits-only”的字段。然后,您可以在仅数字字段上使用范围查询来查询两个值之间的电话号码:
此查询将返回电话号码大于1且小于或等于(233)333-3444的每个文档