
Elasticsearch의 Query DSL (Domain Specific Language)은 Elasticsearch에서 데이터를 검색하기 위해 사용되는 강력하고 유연한 쿼리 언어입니다. DSL은 '도메인 특화 언어'를 의미하며, 이 경우 도메인은 데이터 검색과 관련된 작업이다. Elasticsearch의 Query DSL은 JSON 형식으로 쿼리를 작성하며, 다양한 검색 요구 사항을 표현할 수 있는 다양한 타입의 쿼리를 제공한다.
Full-Text Query
텍스트 데이터를 검색할 때 사용되는 쿼리 유형이다. 이들은 일반적으로 자연 언어 텍스트에서 단어나 문구를 검색하는 데 사용되며, 각 쿼리 유형은 텍스트 검색을 다른 방식으로 수행하며 주요 Full-Text Queries에 대해 자세히 설명해보겠다
먼저 query하기전 bulk로 데이터를 넣어주겠다

POST test_index/_bulk
{"index":{"_id":1}}
{"text":"The quick brown fox jumps high"}
{"index":{"_id":2}}
{"text":"Quick thinking by the brown dog"}
{"index":{"_id":3}}
{"text":"A fox is quicker than a lazy dog"}
{"index":{"_id":4}}
{"text":"The brown fox and the quick dog play together"}
{"index":{"_id":5}}
{"text":"A quick brown fox outpaces a quick dog"}
match_all
query에 match_all을 하게되면 해당 인덱스를 전체 검색한다

이게 해당 쿼리의 결과이고 그냥 query문을 사용하지않고 {인덱스}/_search 만해도 동일한 결과가 나온다

match
match 쿼리는 가장 일반적으로 사용되는 전문 검색 쿼리이다. 특정 필드에서 주어진 텍스트를 검색하며, 검색어가 필드 값과 어떻게 일치하는지에 따라 결과를 반환한다. match 쿼리는 텍스트를 분석하여 검색어와 필드의 텍스트가 어떻게 일치하는지 확인한다.

GET test_index/_search
{
"query": {
"match": {
"text": "fox"
}
}
}
match 안에 검색하고싶은 필드명을 지정하고 text필드에 fox라는 데이터만 검색한다. 4개의 도큐먼트를 불러왔고 각각 text 필드에 fox가 있는걸 확인 할 수 있다

text 필드에 brown과 dog를 같이 검색하게되면 brown이 있는 도큐먼트 or dog가 있는 도큐먼트가 검색이된다
즉 OR검색과 동일하다

GET test_index/_search
{
"query": {
"match": {
"text": "brown dog"
}
}
}

위에서는 OR로 검색을 했다면 AND검색을 해보겠다
AND로 검색을 하는건 기존과는 다른데 text필드를 지정하고 query에 검색할 단어를 설정후 operator에 and 조건을 추가해주면된다.

GET test_index/_search
{
"query": {
"match": {
"text": {
"query": "brown dog",
"operator": "and"
}
}
}
}
brown과 dog가 같이 들어가있는 도큐먼트만 검색이된걸 확인할 수 있다

match_phrase
match_phrase 쿼리는 Elasticsearch에서 사용되는 특별한 종류의 검색 쿼리이다. 이 쿼리는 지정된 순서대로 단어가 정확히 일치하는 문구를 찾는 데 사용된다. match_phrase 쿼리의 주요 특징과 사용 방법에 대해 설명하겠다.
아래와 같이 쿼리하게되면 brown dog 사이에 공백까지 포함해서 같은 도큐먼트만 검색한다

GET test_index/_search
{
"query": {
"match_phrase": {
"text": "brown dog"
}
}
}
쿼리를 확인해보면 match와 다르게 하나의 도큐먼트만 확인이 가능하다

match_phrase에는 slop 옵션이 존재하는데 slop가 1이라면 검색하려는 텍스트 사이에 1개의 단어가 들어오는걸 가능하게 검색하는 기능이다

GET test_index/_search
{
"query": {
"match_phrase": {
"text": {
"query": "quick fox",
"slop": 1
}
}
}
}
예상되는 검색결과로는 quick 와 fox 사이에 다른 단어가 껴있는 필드만 검색이될거다 예상되는 결과대로 나온걸 확인할 수 있다
이검색을 사용하는 예시로는 초록색 목도리라는 검색을 했을때 초록색 목도리는 종류가 다양한데 재질같은 경우는 울이나 니트 등 여러게의 종유가 있을때 초록색과 목도리 사이에 slop를 넣어서 여러가지 재질의 초록색 목도리들을 검색할수 있는 방법이있다. 그래서 slop는 2개이상 사용하지 않는걸 권장하고있다 2개로 해버리면 원치않는 데이터까지 검색이 되기때문이다

query_string
query_string 쿼리는 Elasticsearch에서 사용되는 강력하고 유연한 검색 쿼리 유형 중 하나이다. 이 쿼리는 사용자가 Lucene 쿼리 구문을 사용하여 복잡한 검색을 수행할 수 있게 한다. query_string 쿼리의 주요 특징과 사용 방법을 살펴보겠다.
아래의 예시는 와일드카드와 AND 연산자로 쿼리하는 예시이다

첫번째의 검색결과는 text필드에 qui 만 들어가있다면 모든결과가 검색될거고 두번째의 검색결과로는 fox와 dog가 모두 들어간 도큐먼트만 검색될거다
'DevOps > ElasticSearch' 카테고리의 다른 글
[ElasticSearch] ElaticSearch란 무엇인가, CRUD (0) | 2024.01.01 |
---|