Problem z wyszukiwaniem symboli wieloznacznych w przypadku długiego typu danych w elastyfikatorze
{
"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
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