Masalah pencarian karakter pengganti dengan tipe data panjang di elasticsearch

Dec 02 2020
   {
   "from":0,
   "query":{
      "bool":{
         "must":[
            {
               "query_string":{
                  "query":"10*",
                  "lenient":true,
                  "fields":[
                     "phoneNumber"
                  ],
                  "escape":true
               }
            }
         ]
      }
   }
}

Di sini phonenumber bertipe long dan kami ingin melakukan pencarian wildcard di atasnya. Saya meneruskan kueri karena 10 * ( "query":"10*",) Klik sebenarnya seharusnya 15 tetapi saya mendapatkan 0 klik.

Jika saya melakukan hal yang sama untuk bidang dengan jenis kata kunci (string) Alamat , dengan kueri "query":"newyork*",saya mendapatkan hasilnya.

Adakah yang tahu mengapa kami tidak mendapatkan hit untuk bidang dengan tipe panjang?

Jawaban

2 ESCoder Dec 02 2020 at 21:24

Tidak mungkin secara langsung menjalankan karakter pengganti pada tipe data numerik. Lebih baik mengonversi bilangan bulat tersebut menjadi string.

Menambahkan contoh yang berfungsi dengan data indeks, pemetaan, kueri penelusuran, dan hasil penelusuran

Pemetaan Indeks:

{
  "mappings": {
    "properties": {
      "phoneNumber": {
        "type": "text"
      }
    }
  }
}

Indeks Data:

{
  "phoneNumber": "101"
}

Kueri Pencarian:

{
  "query": {
    "bool": {
      "filter": [
        {
          "query_string": {
            "query": "10*",
            "fields": [
              "phoneNumber"
            ]
          }
        }
      ]
    }
  }
}

Hasil pencarian:

"hits": [
      {
        "_index": "65109764",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.0,
        "_source": {
          "phoneNumber": "101"
        }
      }
    ]

Jika Anda ingin melakukan pencocokan parsial, maka Anda bahkan dapat menggunakan tokenizer edge n-gram