c# - elasticsearch中长数据类型的通配符搜索问题
问题描述
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
这里的电话号码是 long 类型,我们要对其执行通配符搜索。我将查询传递为10 * ( "query":"10*",
) 实际命中应该是 15,但我得到 0 命中。
如果我对类型为 keyword(string) Address的字段执行相同的操作,则查询"query":"newyork*",
我得到结果。
有谁知道为什么我们没有得到 long 类型的字段的命中?
解决方案
不能直接对数字数据类型执行通配符。最好将这些整数转换为字符串。
添加具有索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
{
"mappings": {
"properties": {
"phoneNumber": {
"type": "text"
}
}
}
}
指数数据:
{
"phoneNumber": "101"
}
搜索查询:
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "10*",
"fields": [
"phoneNumber"
]
}
}
]
}
}
}
搜索结果:
"hits": [
{
"_index": "65109764",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"phoneNumber": "101"
}
}
]
如果你想做部分匹配,那么你甚至可以使用edge n-gram tokenizer