Elasticsearch의 긴 데이터 유형과 관련된 와일드 카드 검색 문제
Dec 02 2020
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
여기서 전화 번호 는 long 유형이며 여기에서 와일드 카드 검색을 수행하려고합니다. 쿼리를 10 * ( "query":"10*",
) 로 전달하고 있습니다. 실제 히트는 15이어야하지만 0 히트를 얻습니다.
키워드 (string) Address 유형의 필드에 대해 동일한 작업을 수행하는 경우 쿼리 "query":"newyork*",
를 통해 결과를 얻습니다.
유형이 긴 필드에 대한 히트를 얻지 못한 이유를 아는 사람이 있습니까?
답변
2 ESCoder Dec 02 2020 at 21:24
숫자 데이터 유형에 대해 와일드 카드를 직접 수행하는 것은 불가능합니다. 이러한 정수를 문자열로 변환하는 것이 좋습니다.
인덱스 데이터, 매핑, 검색 쿼리 및 검색 결과가 포함 된 작업 예제 추가
인덱스 매핑 :
{
"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 토크 나이저 를 사용할 수도 있습니다.