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" }}
]
}
}
}
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"
}
}
}
}
GET /my_index/my_type/_search
{
"query": {
"match": {
"title": {
"query": "quick brown dog",
"minimum_should_match": "75%"
}
}
}
}
모든
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" }}
]
}
}
}
{
"match": { "title": "brown fox"}
}
{
"bool": {
"should": [
{ "term": { "title": "brown" }},
{ "term": { "title": "fox" }}
]
}
}
{
"match": {
"title": {
"query": "brown fox",
"operator": "and"
}
}
}
{
"bool": {
"must": [
{ "term": { "title": "brown" }},
{ "term": { "title": "fox" }}
]
}
}
{
"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
}
}
물론
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
, search
및 content
세 단어가 모두 포함되어야 합니다.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
}
}}
]
}
}
}
boost
1
을 사용합니다.boost
값을 가지고 있기 때문에 더욱 중요하다.Elasticsearch
문장에 미치지 못한다.boost
매개 변수는 한 문장의 상대적 권중(boost
값이 1
보다 크거나 상대적 권중(boost
값이 0
에서 1
사이) 사이를 낮추는 데 사용되지만, 이러한 향상이나 감소는 선형이 아니다. 다시 말하면 만약에 하나boost
값이 2
사이라면 두 배의 평점_score
을 받을 수 없다.반면 새로운 평점
_score
은 응용권이 향상된 후에 귀일화되고 모든 유형의 조회는 자신의 귀일 알고리즘이 있다.만약에 TF/IDF를 바탕으로 자신의 평가 모델을 실현하지 않는다면 우리는 권중 향상 과정에 대해 더 많은 통제를 해야 한다. function_score
조회로 한 문서의 권중 향상 방식을 조종하고 귀일화 절차를 뛰어넘을 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.