通配符搜索问题

omhiaaxx  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(342)
{
   "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*", 我得到结果了。
有人知道为什么我们没有得到长型字段的点击率吗?

lqfhib0f

lqfhib0f1#

不能直接对数字数据类型执行通配符。最好将这些整数转换成字符串。
添加索引数据、Map、搜索查询和搜索结果的工作示例
索引Map:

{
  "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标记器

相关问题