在 Elasticsearch 中搜索关于 phone 个数字的查询
Search Query about phone number in Elasticsearch
我有一个关于 Elasticsearch 的问题
我搜索了 phone 号码。我的计划是,即使我不放置连字符或括号,结果也会显示 phone 数字。
例如,
phone 号码是 (213)234-1111
和
搜索查询是
GET _msearch
{ "query": {"fuzzy": { "tel": {"value": "2132341111", "max_expansions" : 100}}}}
结果是
{
"took" : 0,
"responses" : [
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"status" : 200
}
]
}
我需要帮助,即使我输入的数字没有括号和连字符,结果也显示了真实的 phone 数字和信息。
为了高效查询,请确保相应地为文档编制索引。
在我刚刚制作的这个示例中,我确保 phone-numbers 的索引没有连字符和括号。这使我也可以在不使用这些字符的情况下进行查询。
示例:
(1) 创建索引:
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": "\((\d+)\)(\d+)-(\d+)",
"replacement": ""
}
}
}
}
}
(2) 添加文档到索引:
POST my_index/doc
{
"Description": "My phone number is (213)234-1111"
}
(3) 用原phone号查询:
GET my_index/_search
{
"query": {
"match": {
"Description": "(213)234-1111"
}
}
}
(1 result)
(4) 不带特殊字符的查询:
GET my_index/_search
{
"query": {
"match": {
"Description": "2132341111"
}
}
}
(1 result)
那是怎么做到的?
通过使用 pattern_replace 字符过滤器,我们去除了除原始数字以外的所有内容,这意味着每当我们匹配 phone 数字。由于此 pattern_replace 也在查询时应用,我们现在可以在 phone 数字中使用和不使用特殊字符进行搜索并获得匹配项。
我有一个关于 Elasticsearch 的问题
我搜索了 phone 号码。我的计划是,即使我不放置连字符或括号,结果也会显示 phone 数字。
例如, phone 号码是 (213)234-1111 和 搜索查询是
GET _msearch
{ "query": {"fuzzy": { "tel": {"value": "2132341111", "max_expansions" : 100}}}}
结果是
{
"took" : 0,
"responses" : [
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"status" : 200
}
]
}
我需要帮助,即使我输入的数字没有括号和连字符,结果也显示了真实的 phone 数字和信息。
为了高效查询,请确保相应地为文档编制索引。
在我刚刚制作的这个示例中,我确保 phone-numbers 的索引没有连字符和括号。这使我也可以在不使用这些字符的情况下进行查询。
示例:
(1) 创建索引:
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": "\((\d+)\)(\d+)-(\d+)",
"replacement": ""
}
}
}
}
}
(2) 添加文档到索引:
POST my_index/doc
{
"Description": "My phone number is (213)234-1111"
}
(3) 用原phone号查询:
GET my_index/_search
{
"query": {
"match": {
"Description": "(213)234-1111"
}
}
}
(1 result)
(4) 不带特殊字符的查询:
GET my_index/_search
{
"query": {
"match": {
"Description": "2132341111"
}
}
}
(1 result)
那是怎么做到的?
通过使用 pattern_replace 字符过滤器,我们去除了除原始数字以外的所有内容,这意味着每当我们匹配 phone 数字。由于此 pattern_replace 也在查询时应用,我们现在可以在 phone 数字中使用和不使用特殊字符进行搜索并获得匹配项。