ElasticSearch 구조화 조회
12477 단어 ElasticSearch
term 필터링
term
주로 숫자, 날짜, 부울 값 또는 not_analyzed
문자열 (분석되지 않은 텍스트 데이터 유형) 과 일치하는 값에 사용됩니다. { "term": { "age": 26 }}
{ "term": { "date": "2014-09-01" }}
{ "term": { "public": true }}
{ "term": { "tag": "full_text" }}
terms 필터링
terms
은term
과 약간 유사하지만 terms
여러 개의 일치 조건을 지정할 수 있습니다.필드가 여러 값을 지정하면 문서가 함께 일치해야 합니다.{
"terms": {
"tag": [ "search", "full_text", "nosql" ]
}
}
범위 필터링
range
필터링을 통해 지정된 범위에 따라 데이터를 찾을 수 있습니다.{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}
범위 연산자는 다음과 같습니다.
gt
: 보다 크다gte
: 보다 크면 같음lt
: 이하lte
: 이하exists와missing 필터
exists
및 missing
필터링은 문서에 지정된 필드가 포함되어 있는지 또는 SQL 문장의 IS_NULL
조건과 유사한 필드가 없는지를 찾는 데 사용됩니다.{
"exists": {
"field": "title"
}
}
이 두 필터는 이미 찾아낸 데이터에 대한 것이지만, 어떤 필드가 존재하는지 구분하고 싶을 때 사용됩니다.
bool 필터링
bool
필터는 여러 필터 조건 조회 결과를 병합하는 데 사용할 수 있는 부울 논리로 조작부호를 포함합니다.must
: 여러 개의 조회 조건이 완전히 일치하여 and
에 해당한다.must_not
: 여러 개의 조회 조건의 상반된 일치는 not
에 해당한다.should
: 최소한 하나의 조회 조건이 일치합니다. or
에 해당합니다.이러한 매개변수는 필터 조건 또는 필터 조건의 배열을 각각 상속할 수 있습니다.
{
"bool": {
"must": { "term": { "folder": "inbox" }},
"must_not": { "term": { "tag": "spam" }},
"should": [
{ "term": { "starred": true }},
{ "term": { "unread": true }}
]
}
}
match_all 조회
match_all
를 사용하면 모든 문서를 조회할 수 있으며 조회 조건이 없는 기본 문장입니다.{
"match_all": {}
}
이 조회는 필터 조건을 병합하는 데 자주 사용됩니다.예를 들어 모든 메일박스를 검색해야 하는데 모든 문서의 관련성이 같기 때문에 얻은 것
_score
은 1이다match 질의
match
조회는 표준 조회입니다. 전체 텍스트 조회가 필요하든 정확한 조회가 필요하든 기본적으로 그것을 사용해야 합니다.만약
match
를 사용하여 전체 텍스트 필드를 조회한다면, 진정한 조회를 하기 전에 분석기로 match
조회 문자를 분석합니다.{
"match": {
"tweet": "About Search"
}
}
match
로 정확한 값을 지정하면 숫자, 날짜, 부울 값 또는 not_analyzed
문자열을 만났을 때 지정한 값을 검색합니다.{ "match": { "age": 26 }}
{ "match": { "date": "2014-09-01" }}
{ "match": { "public": true }}
{ "match": { "tag": "full_text" }}
알림: 정확한 일치 검색을 할 때, 필터 문장을 사용하는 것이 좋습니다. 필터 문장은 데이터를 캐시할 수 있기 때문입니다.
우리가 에서 소개한 문자 검색과 달리
match
검색은 "+usid:2+tweet:search"와 같은 문장을 사용할 수 없습니다.문법 오류를 피하기 위해 정확한 필드 이름만 지정할 수 있습니다.multi_match 질의
multi_match
조회는 match
조회를 바탕으로 여러 필드를 동시에 검색할 수 있습니다.{
"multi_match": {
"query": "full text search",
"fields": [ "title", "body" ]
}
}
bool 조회
bool
조회는 bool
필터와 비슷하여 여러 개의 조회 자구를 통합하는 데 사용됩니다.다른 것은 bool
필터는 일치 여부를 직접 제시할 수 있고, bool
조회는 모든 조회 자구의 _score
(관련성 점수) 를 계산해야 한다.must
: 지정한 문서를 조회하려면 반드시 포함해야 합니다.must_not
: 지정한 문서를 조회할 때 반드시 포함하지 마십시오.should
: 지정한 문서를 조회하고 있으면 문서 관련성에 점수를 부여할 수 있습니다.다음 검색에서는
title
필드에'how to make millions'가 포함되어 있고'tag'필드가 spam
로 표시되지 않았습니다.만약에'starred'라고 표시되거나 발표일이 2014년 이전이라면 이 일치하는 문서들은 같은 사이트보다 등급이 높을 것이다.{
"bool": {
"must": { "match": { "title": "how to make millions" }},
"must_not": { "match": { "tag": "spam" }},
"should": [
{ "match": { "tag": "starred" }},
{ "range": { "date": { "gte": "2014-01-01" }}}
]
}
}
알림:
bool
조회에 must
자구가 없으면 최소한 should
자구가 있어야 합니다.그러나 must
자구가 있으면 should
자구가 없어도 조회할 수 있다.조회와 필터 조건의 합병
조회 문장과 필터 문장은 각자의 상하문에 놓을 수 있다.ElasticSearch API에서는
query
또는 filter
가 포함된 많은 구문을 볼 수 있습니다.이 문장들은 하나의query문장도 포함할 수 있고,filter자구도 포함할 수 있다.다시 말하면 이 문장들은 먼저 query
또는 filter
상하문 관계를 만들어야 한다.복합 검색 문장은 다른 검색 서브문장을 넣을 수 있고, 복합 필터 문장도 다른 필터 서브문장을 넣을 수 있다.일반적인 경우, 검색 문장은 전체 텍스트 검색을 제외하고, 필터 문장의 보조를 필요로 한다.
그러니까 검색 문장은 필터 자구를 포함할 수 있고, 반대로도 마찬가지다.query나 filter의 상하문을 전환할 수 있도록 합니다.이것은 우리가 수요를 읽는 동시에 정확하고 효과적인 문장을 구성하도록 요구한다.
필터가 있는 조회 문장
검색 문장 필터링
예를 들어 우리는 이런 조회 문장이 있다.
{
"match": {
"email": "business opportunity"
}
}
그리고 우리는 이 문장을
term
필터에 넣고 우편함에 메일을 일치하게 하려고 합니다.{
"term": {
"folder": "inbox"
}
}
search
API에는 query
문장만 포함할 수 있으므로 filtered
를 사용하여 "query"와 "filter"자문을 동시에 포함해야 합니다.{
"filtered": {
"query": { "match": { "email": "business opportunity" }},
"filter": { "term": { "folder": "inbox" }}
}
}
우리는 외부에서
query
컨텍스트 관계를 추가합니다.GET /_search
{
"query": {
"filtered": {
"query": { "match": { "email": "business opportunity" }},
"filter": { "term": { "folder": "inbox" }}
}
}
}
단일 필터 문
query
상하문에서 필터 문장만 있으면 됩니다. 예를 들어 모든 메일과 일치할 때 query
자구를 생략할 수 있습니다.GET /_search
{
"query": {
"filtered": {
"filter": { "term": { "folder": "inbox" }}
}
}
}
만약 조회 문장이 조회 범위를 지정하지 않았다면, 기본적으로
match_all
조회를 사용하기 때문에, 위 문장의 완전한 형식은 다음과 같다.GET /_search
{
"query": {
"filtered": {
"query": { "match_all": {}},
"filter": { "term": { "folder": "inbox" }}
}
}
}
검색 문장의 필터
때때로, 필터의 상하문에서query 자구를 사용해야 합니다.다음 문장은 검색 기능이 있는 필터 문장입니다. 이 문장은 스팸메일처럼 보이는 문서를 필터할 수 있습니다.
GET /_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": { "term": { "folder": "inbox" }},
"must_not": {
"query": { <1>
"match": { "email": "urgent business proposal" }
}
}
}
}
}
}
}
<1> 필터 문장에서
query
검색 방식으로 bool
필터 자문을 대체할 수 있습니다.힌트: 우리가 거의 사용하지 않는 필터 문장에는 검색이 포함되어 있으며, 이러한 사용법은 문법의 완전성을 위한 것이다.필터에서 전체 텍스트가 일치할 때만 이 구조를 사용할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.