ElasticSearch 전체 텍스트 검색 검색 간단한 탐색

8522 단어 ElasticSearch

다사 조회


일반 다사 조회

GET /my_index/my_type/_search
{
    "query": {
        "match": {
            "title": "BROWN DOG!"
        }
    }
}

결과:
{
  "hits": [
     {
        "_id":      "4",
        "_score":   0.73185337, 
        "_source": {
           "title": "Brown fox brown dog"
        }
     },
     {
        "_id":      "2",
        "_score":   0.47486103, 
        "_source": {
           "title": "The quick brown fox jumps over the lazy dog"
        }
     },
     {
        "_id":      "3",
        "_score":   0.47486103, 
        "_source": {
           "title": "The quick brown fox jumps over the quick dog"
        }
     },
     {
        "_id":      "1",
        "_score":   0.11914785, 
        "_source": {
           "title": "The quick brown fox"
        }
     }
  ]
}

정밀도를 높이다


다중 단어 조회는 기본적으로 단어를 나누고 각 부분을 조회합니다. 그 중 한 부분만 맞으면 일치합니다. 정밀도를 높이기 위해 조작부호를 추가할 수 있습니다. 모든 부분과 일치해야 합니다.
질의 수정:
GET /my_index/my_type/_search
{
    "query": {
        "match": {
            "title": {      
                "query":    "BROWN DOG!",
                "operator": "and"
            }
        }
    }
}

제어 정밀도


일치하는 평점이 어느 정도에 도달해야만 돌아올 수 있다match 쿼리 지원 minimum_should_match 최소 일치 매개 변수를 사용하면 문서가 관련되어 있는지 여부를 표시하기 위해 일치해야 하는 단어 수를 지정할 수 있습니다.사용자가 검색할 때 입력한 단어 수를 제어할 수 없기 때문에 구체적인 숫자로 설정할 수 있습니다.
문의
GET /my_index/my_type/_search
{
  "query": {
    "match": {
      "title": {
        "query":                "quick brown dog",
        "minimum_should_match": "75%"
      }
    }
  }
}

백분율을 정할 때 minimum_should_match 적당한 일을 한다. 이전 세 단어의 예시에서 75% 는 자동으로 66.6%, 즉 세 단어 중 두 단어로 절단된다.이 값이 무엇으로 설정되었든지 간에, 적어도 하나의 단어 항목을 포함하는 문서는 일치하는 것으로 여겨진다.

다사 조회 정밀도


모든 must 문장은 일치해야 하고, 모든 must_not 문장은 일치하지 않아야 하지만, 얼마나 많은 should 문장이 일치해야 합니까?기본적으로, should 문장이 없으면 반드시 일치해야 하며, 단지 하나의 예외가 있다. 그것은 must 문장이 없을 때, 적어도 하나should 문장이 일치해야 한다는 것이다.
우리가 match 조회의 정밀도를 제어할 수 있는 것처럼, 우리는 minimum_should_match 매개 변수를 통해 일치해야 하는 should 문장의 수량을 제어할 수 있다. 이것은 절대적인 숫자일 수도 있고 백분율일 수도 있다.
GET /my_index/my_type/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "brown" }},
        { "match": { "title": "fox"   }},
        { "match": { "title": "dog"   }}
      ],
      "minimum_should_match": 2 
    }
  }
}

이 검색 결과는 다음 조건을 충족하는 모든 문서를 되돌려줍니다. title 필드는 "brown" AND "fox", "brown" AND "dog" 또는 "fox" AND "dog" 을 포함합니다.만약 문서에 세 가지 조건이 모두 포함된다면, 그것은 두 개만 포함하는 문서보다 더 관련이 있을 것이다.

부울 일치 질의


기본 or 조작부호를 사용하면 모든 term 조회는 should 문장으로 간주됩니다. 그러면 최소한 한 문장과 일치해야 합니다.다음 두 질의는 등가입니다.
{
    "match": { "title": "brown fox"}
}


{
  "bool": {
    "should": [
      { "term": { "title": "brown" }},
      { "term": { "title": "fox"   }}
    ]
  }
}
and 조작부호를 사용하면 모든 term 조회는 must 문장으로 간주되기 때문에 모든 문장이 일치해야 합니다.다음 두 질의는 등가입니다.
{
    "match": {
        "title": {
            "query":    "brown fox",
            "operator": "and"
        }
    }
}


{
  "bool": {
    "must": [
      { "term": { "title": "brown" }},
      { "term": { "title": "fox"   }}
    ]
  }
}

매개변수minimum_should_match를 지정하면 bool 질의를 통해 다음 두 질의를 동일하게 전달할 수 있습니다.
{
    "match": {
        "title": {
            "query":                "quick brown fox",
            "minimum_should_match": "75%"
        }
    }
}


{
  "bool": {
    "should": [
      { "term": { "title": "brown" }},
      { "term": { "title": "fox"   }},
      { "term": { "title": "quick" }}
    ],
    "minimum_should_match": 2 
  }
}

물론 우리는 일반적으로 이러한 조회를 match 조회로 표시하지만, match 내부의 작업 원리를 이해하면 우리는 자신의 수요에 따라 조회 과정을 통제할 수 있다.어떤 때는 단일match 조회가 수요를 만족시킬 수 없다. 예를 들어 일부 조회 조건에 더 높은 권한을 분배하는 것이다.

조회 문장의 권중을 높이다


물론 bool 조회는 조합이 간단한 단일 단어match 조회에만 국한될 뿐만 아니라 임의의 다른 조회와 기타bool 조회를 조합할 수 있다.보편적인 용법은 여러 개의 독립적인 조회 점수를 종합하여 각 문서의 관련도 평점_score을 미세하게 조정하는 목적을 달성하는 것이다.
만약에'full-text search(전문 검색)'에 관한 문서를 조회하고 싶지만,'Elasticsearch'나'Lucene'를 언급한 문서에 더 높은 권한을 부여하고자 합니다. 여기서 더 높은 권한은 문서에'Elasticsearch'나'Lucene'가 나타나면 이 단어가 없는 문서보다 높은 관련도 평점_score을 받습니다.그것들은 결과집의 더 위에 나타날 것이다.
간단한 bool 조회를 통해 다음과 같은 매우 복잡한 논리를 쓸 수 있습니다.
GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": { 
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [ 
                { "match": { "content": "Elasticsearch" }},
                { "match": { "content": "Lucene"        }}
            ]
        }
    }
}
  • content 필드에는 full, text, searchcontent 세 단어가 모두 포함되어야 합니다.
  • 필드에도 Elasticsearch 또는 Lucene 필드가 포함되어 있으면 문서가 더 높은 평점_score을 받습니다.
  • should 문장이 많이 일치할수록 문서의 관련도가 높다는 것을 나타낸다.아직까지는 괜찮아요.
    그러나 Lucene를 포함하는 것이 더 높은 권중을 가지고, Elasticsearch를 포함하는 문장이 Lucene보다 더 높은 권중을 가지게 하려면 어떻게 해야 합니까?
    우리는 지정boost을 통해 모든 조회 문장의 상대적인 무게를 제어할 수 있습니다. boost의 기본값은 1입니다. 1보다 크면 한 문장의 상대적인 무게가 증가합니다.그래서 아래는 이전의 조회를 다시 쓴다.
    GET /_search
    {
        "query": {
            "bool": {
                "must": {
                    "match": {  //1
                        "content": {
                            "query":    "full text search",
                            "operator": "and"
                        }
                    }
                },
                "should": [
                    { "match": { //2
                        "content": {
                            "query": "Elasticsearch",
                            "boost": 3 
                        }
                    }},
                    { "match": { //3
                        "content": {
                            "query": "Lucene",
                            "boost": 2 
                        }
                    }}
                ]
            }
        }
    }
  • 이 문장들은 기본값boost1을 사용합니다.
  • 이 문장은 가장 높은 boost 값을 가지고 있기 때문에 더욱 중요하다.
  • 이 문장은 기본값을 사용하는 것보다 더 중요하지만, 그 중요성은 Elasticsearch 문장에 미치지 못한다.
  • boost 매개 변수는 한 문장의 상대적 권중(boost 값이 1 보다 크거나 상대적 권중(boost 값이 0 에서 1 사이) 사이를 낮추는 데 사용되지만, 이러한 향상이나 감소는 선형이 아니다. 다시 말하면 만약에 하나boost 값이 2 사이라면 두 배의 평점_score을 받을 수 없다.
    반면 새로운 평점_score은 응용권이 향상된 후에 귀일화되고 모든 유형의 조회는 자신의 귀일 알고리즘이 있다.만약에 TF/IDF를 바탕으로 자신의 평가 모델을 실현하지 않는다면 우리는 권중 향상 과정에 대해 더 많은 통제를 해야 한다. function_score 조회로 한 문서의 권중 향상 방식을 조종하고 귀일화 절차를 뛰어넘을 수 있다.

    좋은 웹페이지 즐겨찾기