elasticsearch 학습노트 고급편(14)-실전 접두사 검색, 어댑터 검색, 정규 검색

3823 단어 elasticsearch

데이터 준비:

PUT /test_index/_create/1
{
  "test_field": "C3D0-KD345"
}
PUT /test_index/_create/2
{
  "test_field": "C3K5-DFG65"
}
PUT /test_index/_create/3
{
  "test_field": "C4I8-UI365"
}

접두사 검색:


원리: 접두사 일치는 관련도 점수를 계산하지 않습니다. 접두사 필터와 유일한 차이점은 필터가cachebitset이 있다는 것입니다.그것은 전체 역렬 색인을 스캔할 것이다.접두사 기준에 맞는 문서를 찾습니다.그래서 접두사가 짧을수록 처리할 문서가 많고 성능이 떨어지므로 가능한 한 긴 접두사로 검색해야 한다.예: C3 접두사가 있는 문서를 검색합니다.
GET /test_index/_search
{
  "query": {
    "match_phrase_prefix": {
      "test_field": "C3"
    }
  }
}

결과:
{
  "took" : 16,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.9808292,
    "hits" : [
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.9808292,
        "_source" : {
          "test_field" : "C3D0-KD345"
        }
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.9808292,
        "_source" : {
          "test_field" : "C3K5-DFG65"
        }
      }
    ]
  }
}

와일드카드 검색:


와일드카드 검색은 접두사 검색과 유사하며 접두사 검색보다 더 강력합니다.전체 역렬 인덱스를 스캔해야 하기 때문에 성능도 매우 떨어진다.?:일치하는 문자 표시
  • : 여러 문자가 일치함을 나타냅니다
  • 예: 와일드카드 검색 조건은 *4입니까?의 문서
    GET /test_index/_search
    {
      "query": {
        "wildcard": {
          "test_field": {
            "value": "*4?"
          }
        }
      }
    }

    출력 결과:
    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "test_field" : "C3D0-KD345"
            }
          }
        ]
      }
    }

    정규 검색:


    regexp는 이전의 어댑터 검색 기능보다 기능이 더 강하다고 할 수 있지만, 전체 역렬 인덱스를 스캔할 수 있으며, 성능도 매우 떨어진다.[0-9]: 범위 내의 숫자 [a-z]: 범위 내의 문자를 지정합니다.문자 +: 앞의 정규 표현식은 한 번 또는 여러 번 나타날 수 있습니다 *: 앞의 정규 표현식은 0번 또는 여러 번 나타날 수 있습니다 {n}: n은 음수 정수가 아니며 n회 예시와 일치하고 검색 조건은.*[a-z] {3}[0-9] {2}의 문서
    GET /test_index/_search
    {
      "query": {
        "regexp": {
          "test_field": {
            "value": ".*[a-z]{3}[0-9]{2}"
          }
        }
      }
    }

    출력 결과:
    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "test_index",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "test_field" : "C3K5-DFG65"
            }
          }
        ]
      }
    }

    좋은 웹페이지 즐겨찾기