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 토크 나이저 를 사용할 수도 있습니다.