用C#在Elasticsearch中搜索电话号码对象



我有一个弹性搜索索引,其中包含一个带有联系人文档的电话号码对象。JSON保存如下:

"contactId": "fd71b8e0-c3dd-4861-a45d-6917fdb48038",
"phone": { "country": "123",
"area": "202",
"number": "4567"
},
"type": "business"

本文档中用于电话对象的映射形式为:

,
"phone": {
"properties": {
"area": {
"type": "string"
},
"country": {
"type": "string"
},
"number": {
"type": "string"
}
}
},

我们正在使用一个实现Nest的C#应用程序查询索引。在应用程序中,我们构造了一个Nest SearchDescriptor对象,该对象用作客户端调用的一部分。当用户正在搜索1232024567之类的字符串时,如何将其添加到SearchDescriptor中以搜索电话号码?

解决此问题的一种方法是同时索引,而不是存储完整的数字,即对其进行索引以使其可用于搜索,但不要存储它,因为它可以从您存储的areacountrynumber重建(也可能是索引(。

如果countryareanumber总是可以在索引时根据完整的电话号码来确定,例如总是以符合模式的已知格式,那么你可以通过索引和存储完整的电话号来不同地处理这一问题,如果countryareanumber只需要搜索,那么将完整的电话编号指定为multi-field,在索引时对countryareanumber中的每一个的字段使用定制分析器来提取用于索引的正确项。在搜索时,您可以使用多字段中的这些字段来查找countryareanumber值的匹配项。

最新更新