[Elasticsearch] 인접 일치 (1) - 단어 일치 및 slop 매개 변수

12058 단어 elasticsearch
본고는 Elasticsearch 공식 안내서Proximity Matching의 한 장을 번역한다.

근접 일치(Proximity Matching)


TF/IDF의 표준 전체 텍스트 검색을 사용하여 문서 또는 문서의 모든 필드를 "큰 봉투의 단어"(Big bag of Words)로 간주합니다.match 검색은 이 봉투에 검색 단어가 포함되어 있는지 알려줄 수 있지만, 이것은 단지 한 방면일 뿐입니다.그것은 우리에게 단어 간의 관계에 관한 어떤 정보도 알려줄 수 없다.
다음 문장의 차이를 고려하십시오.
Sue ate the alligator.
The alligator ate Sue.
Sue never goes anywhere without her alligator-skin purse.
sue alligator를 사용한 match 조회는 상기 모든 문서와 일치하지만, 이 두 단어가 원문의 일부 의미를 나타냈는지, 아니면 완전한 의미를 나타냈는지 알려줄 수 없습니다.
단어 간의 관계를 이해하는 것은 복잡한 문제이다. 우리는 또 다른 조회만으로 문제를 해결할 수 없다. 그러나 우리는 적어도 단어 간의 거리를 통해 단어 간의 가능한 관계를 추정할 수 있다.
실제 문서는 위의 몇 가지 사례보다 더 길지도 모른다. Sue와 alligator는 몇 개의 단락을 사이에 두고 있을지도 모른다.아마도 우리는 여전히 이런 문서를 포함하기를 원하지만, 우리는 Sue와alligator가 비교적 가까운 문서에 더 높은 관련도 점수를 줄 것이다.
이것이 바로 구문 일치(Phrase Matching) 또는 인접도 일치(Proximity Matching)입니다.
TIP
이 장에서는 여전히 match 질의 에서 사용되는 프레젠테이션 샘플 문서를 사용합니다.

구문 일치(Phrase Matching)


전문 검색하면 match 검색이 먼저 떠오르는 것처럼 가까운 단어를 찾아야 할 때 match_phrase 쿼리:
GET /my_index/my_type/_search
{
    "query": {
        "match_phrase": {
            "title": "quick brown fox"
        }
    }
}

match 쿼리와 유사, match_phrase 조회는 먼저 검색 문자열을 해석하여 단어 목록을 생성합니다.그러면 모든 단어가 검색되지만 모든 검색 단어가 포함된 문서만 유지되고 단어의 위치는 인접해야 합니다.단어quick fox에 대한 검색은 어떤 문서든 일치하지 않습니다. 인접한 Quick과box 단어가 없기 때문입니다.
TIP
match_phrase 쿼리도 phrase 형식의 match 쿼리로 쓸 수 있습니다.
"match": {
    "title": {
        "query": "quick brown fox",
        "type":  "phrase"
    }
}

단어 위치


문자열이 해석될 때, 해석기는 하나의 단어 목록만 되돌려줄 뿐만 아니라, 동시에 모든 단어의 위치나 순서 정보도 되돌려줍니다.
GET /_analyze?analyzer=standard
Quick brown fox

다음 결과가 반환됩니다.
{
   "tokens": [
      {
         "token": "quick",
         "start_offset": 0,
         "end_offset": 5,
         "type": "<ALPHANUM>",
         "position": 1 
      },
      {
         "token": "brown",
         "start_offset": 6,
         "end_offset": 11,
         "type": "<ALPHANUM>",
         "position": 2 
      },
      {
         "token": "fox",
         "start_offset": 12,
         "end_offset": 15,
         "type": "<ALPHANUM>",
         "position": 3 
      }
   ]
}

위치 정보는 match_와 같이 역렬 인덱스(Inverted Index)에 저장될 수 있습니다.phrase와 같은 위치 감지(Position-aware) 조회는 위치 정보를 사용하여 정확한 단어가 나오는 순서를 포함하는 문서와 일치할 수 있으며, 이 단어들 사이에 다른 단어가 삽입되지 않습니다.

뭐 공부 해요?


"quick brown fox"라는 단어가 일치하는 문서의 경우 다음 조건은 true여야 합니다.
quick,brown,fox는 현재 필드에서 모두 내보내야 합니다.
brown의 위치는quick의 위치보다 1이 커야 합니다.
fox의 위치는quick의 위치보다 2 커야 합니다.
이상의 조건이 충족되지 않았다고 가정하면 문서가 일치할 수 없습니다.
TIP
내부, match_phrase 쿼리는 위치 감지 쿼리를 실행하기 위해 저급한span 쿼리족(Query Family)을 사용합니다.span 조회는 단어 단계의 조회이기 때문에 해석 단계가 없습니다(Analysis Phase).그것들은 정확한 단어를 직접 검색한다.
다행히도 대부분의 사용자들은 span 조회를 직접 사용할 필요가 없을 뻔했다. match_phrase 조회는 통상적으로 이미 충분합니다.그러나 일부 특별한 필드, 예를 들어 특허 검색(Patent Search)은 이런 저급 검색을 사용하여 매우 특별한 구조를 가진 위치 검색을 실행한다.

혼합(Mixing it up)


정확한 구문(Exact-phrase)의 일치가 너무 엄격할 수도 있습니다."quick brown fox"를 포함하는 문서도 "quick fox"조회와 일치하기를 원할 수도 있습니다. 위치가 전혀 같지 않더라도.
우리는 짧은 말의 일치에 slop 매개 변수를 사용하여 약간의 유연성을 도입할 수 있다.
GET /my_index/my_type/_search
{
    "query": {
        "match_phrase": {
            "title": {
                "query": "quick fox",
                "slop":  1
            }
        }
    }
}

slop 매개 변수 알림match_phrase 검색 단어는 얼마나 멀리 떨어져 있어도 문서를 일치하는 것으로 간주할 수 있습니다.얼마나 멀리 떨어져 있느냐는 것은, 검색과 문서가 일치하도록 단어를 몇 번 이동해야 한다는 것입니까?
우리는 간단한 예로 이 개념을 논술한다.Quick fox가 Quick brown fox를 포함하는 문서와 일치할 수 있도록 slop의 값을 1:
            Pos 1         Pos 2         Pos 3
-----------------------------------------------
Doc:        quick         brown         fox
-----------------------------------------------
Query:      quick         fox
Slop 1:     quick                 ↳     fox

slop을 사용한 단어 일치에서 모든 단어가 나타나야 하지만 단어의 출현 순서가 달라질 수 있습니다.slop의 값이 충분하다고 가정하면 단어의 순서는 임의로 할 수 있다.
fox quick 조회가 우리 문서와 일치하도록 하려면 slop의 값이 3이어야 합니다.
            Pos 1         Pos 2         Pos 3
-----------------------------------------------
Doc:        quick         brown         fox
-----------------------------------------------
Query:      fox           quick
Slop 1:     fox|quick  ↵  
Slop 2:     quick      ↳  fox
Slop 3:     quick                 ↳     fox

좋은 웹페이지 즐겨찾기