programing

Elastic Search를 사용하여 여러 필드에서 검색

newstyles 2023. 3. 15. 19:26

Elastic Search를 사용하여 여러 필드에서 검색

Elastic Search를 처음 사용하는데 하나 이상의 필드를 지정하여 검색을 수행할 수 있는 방법이 궁금합니다.

SQL에서는 다음 쿼리를 작성합니다.

"SELECT field1, field2, field3 FROM tablename WHERE field1 = 'X' AND field2 != 'Y' AND field3 = 'Z'"

Elastic Search에서는 다음과 같이 시작합니다.

{
    "query": {
        "filtered": {
            "query": {
                "query_string": {
                    "query": "*"
                }
            },
            "filter": {
                "term" : {
                    "field1" : "286"
                }
            }
        }
    }
}

sql 쿼리는 다음과 같습니다.

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field1": "X"
          }
        },
        {
          "term": {
            "field3": "Z"
          }
        }
      ],
      "must_not": {
        "term": {
          "field2": "Y"
        }
      }
    }
  }
}

어쨌든, 만약 당신이 처음이라면 탄력적인 검색을 시작하기 전에 문서를 조금 읽는 것을 추천합니다.

많은 유형의 쿼리가 있으며, 이들 중 일부는 데이터를 인덱싱하는 방법에 따라 달라집니다. 예를 들어 문자열의 경우 인덱스 시간에 문자열(소문자, 스템 워드, 스톱워드 제거 등)을 분석할 수 있습니다.인덱스 시 필드를 분석하고 소문자로 변환하면 내가 게시한 쿼리는 필드1이 "X"인 문서와 일치하지 않습니다.

탄력 검색을 조금 더 잘 알게 되면 필터를 사용하여 쿼리를 개선할 수 있습니다.

처음에는 어려울 수 있는 작업에 대한 적절한 쿼리를 선택해야 합니다.Bool 쿼리를 사용하여 이미 제안했듯이 모든 종류의 쿼리를 함께 결합할 수 있습니다.또한 여러 필드에서 실행할 수 있으며 내부적으로 부울 쿼리에 매핑할 수 있는 쿼리도 있습니다.또한 용어 쿼리는 텍스트 분석을 지원하지 않기 때문에 프로덕션 시스템에서 그다지 흔하지 않지만, 일반적으로 쿼리하는 필드를 인덱싱하는 방법과 유사한 방식으로 쿼리를 분석하려고 합니다.

Elastic Search에서 가장 일반적인 쿼리 중 하나는 단일 필드에서 작동하는 일치 쿼리입니다.또한 여러 필드에서도 동일한 옵션을 사용하는 multi_match라는 쿼리가 있습니다.이러한 쿼리는 텍스트 분석을 지원하며 매우 잘 작동합니다.예를 들어 query_string 쿼리에서 사용하는 것이 좋습니다.이 쿼리는 훨씬 강력하지만 해석 프로세스가 필요하기 때문에 오류가 발생하기 쉽습니다.query_string은 특정 기능 중 하나(예를 들어 쿼리 자체 내의 필드 이름 또는 부울 연산자 지정)가 필요한 경우에만 사용할 수 있습니다.그렇지 않으면 일치 쿼리를 사용합니다.

쿼리와 필터의 차이를 이해하는 것도 중요합니다.자세한 내용은 여기를 참조하십시오.

또한 쿼리 DSL에서 사용할 수 있는 모든 쿼리를 살펴보고 다양한 작업을 체험해 보십시오.

여러 필드에서 동일한 값을 검색하려면

{"query": {"multi_match": {"query": "querystring", "fields": ["name", "description"]}}}

querystring

Elastic의 Simple 쿼리부터 시작할 것을 제안합니다.SQL과 비슷하고 이해하기 쉽습니다.링크: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html

쿼리 구문은 다음과 같습니다. 예를 들어 이름이 John AND 성 Doe인 게스트를 찾으려는 경우:

GET /_search
{
  "query": {
    "simple_query_string" : {
        "query": "John + Doe",
        "fields": ["guest"],
        "default_operator": "and"
    }
  }
}

이 기준 중 하나가 일치하지 않으면 쿼리는 히트를 반환하지 않습니다.또한 여기서 여러 필드를 검색할 수 있지만 한 필드를 검색하는 것보다 속도가 느려집니다.또한 문서에 따르면 단순 쿼리는 논리\검색 연산자로서 특수 기호를 지원합니다.

 '+' signifies AND operation | signifies OR operation
 '-' negates a single token " wraps a number of tokens to signify a phrase for searching
 '*' at the end of a term signifies a prefix query

언급URL : https://stackoverflow.com/questions/18695310/search-on-multiple-fields-with-elasticsearch