Problem z wyszukiwaniem symboli wieloznacznych w przypadku długiego typu danych w elastyfikatorze

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

Tutaj numer telefonu jest typu long i chcemy przeprowadzić na nim wyszukiwanie za pomocą symboli wieloznacznych. Przekazuję zapytanie jako 10 * ( "query":"10*",) Rzeczywiste trafienia powinny wynosić 15, ale otrzymuję 0 trafień.

Jeśli robię to samo dla pola z typem słowa kluczowego (ciąg znaków) Adres , z zapytaniem "query":"newyork*",otrzymuję wynik.

Czy ktoś ma pojęcie, dlaczego nie otrzymaliśmy trafień dla pól z długim typem?

Odpowiedzi

2 ESCoder Dec 02 2020 at 21:24

Nie jest bezpośrednio możliwe wykonywanie symboli wieloznacznych na liczbowych typach danych. Lepiej jest przekonwertować te liczby całkowite na łańcuchy.

Dodanie działającego przykładu z danymi indeksu, mapowaniem, zapytaniem wyszukiwania i wynikiem wyszukiwania

Mapowanie indeksu:

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

Dane indeksowe:

{
  "phoneNumber": "101"
}

Wyszukiwana fraza:

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

Wynik wyszukiwania:

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

Jeśli chcesz wykonać częściowe dopasowanie, możesz nawet skorzystać z tokenizera krawędzi n-gramowej