반응형

text filed에서 검색어 입력시 검색이 되었다고 가정하고, 각 쿼리 메소드마다 동작하는 방식의 차이가 있어서 정리를 해봅니다.

약 2천개의 데이터만 넣어두고 간단하게 테스트를 진행해보았으며, 검색 필드명은 description이였습니다.

Query DSL

Elasticsearch

REST API

[

POST

,HEADER : { Content-Type : application/json }

,BODY: {raw: }

]

result

match

{
  "query": {
    "match": {
      "description": "are not"
    }
  }
}

total : 680

description 필드에 “are”, “not”이 포함된 문서를 검색합니다. match에 여러개의 검색어를 넣게 되면 or 조건으로 검색됩니다.

“are”, “not” 둘 중 하나라도 포함되면 검색됨

desc: are ... ~~ In getProcessRecordLocked(o)

desc: not ... some web.. ~ (o)

match

{
  "query": {
    "match": {
      "description": {
        "query": "are not",
        "operator": "and"
      }
    }
  }
}

total: 63

or 조건절로 검색되는 현상을 막기위해서 operator 옵션을 사용하여 and절로 검색할 수 있습니다.

“are” 도 있고 “not” 도 존재하는 text field를 조사합니다.

desc: are ... ~~ in getProcessReco... (x)

desc: are ... ~~ interaction is not needed...(o)

match_phrase

{
  "query": {
    "match_phrase": {
      "description": {
        "query": "are not",
        "slop": 1
      }
    }
  }
}

total: 23

정확하게 are not으로 작성된 text field를 검색합니다.

 

desc: are ... ~~ interaction is not needed...(x)

desc: .... isolated apps are not handled (o)

 

regexp

{
  "query": {
    "bool": {
      "must" : [
        {"regexp": {
          "description": ".*are.*"
        }},
        {"regexp": {
          "description": ".*not.*"
        }}
      ]
    }
  }
}

total: 107

얼핏보면 match and와 비슷해보이지만 결과가 다릅니다. 정규식이기 때문에 단어라인이 포함만 되어도 동작합니다.

 

desc: these details are obtained from...

vectors. NOTE: some of ...~ (o)

반응형