Elasticsearch의 중첩 조회 소개 및 실례
3358 단어 elasticelasticsearchnested중첩된 질의
하나의 업무 장면을 고려하는 것부터 시작하자. 업무상 특정한 유사한 상품을 하나의 관련 그룹으로 집합시켜야 한다. 특정한 상품의 특징에 따라 자신이 있는 관련 그룹을 조회할 수 있도록 지원해야 한다.es의 저장 구조는 다음과 같다.
{
"memberGoods":[
{
"title":" A",
"brand":"a"
},
{
"title":" B",
"brand":"b"
}
],
"groupId":"A"
}
그러면 질문이 왔습니다. 만약memberGoods가 일반적인 Object 형식이라면 아래의 조회 조건에 대해:
{
"query":{
"bool":{
"must":[
{
"match":{
"title":" A"
}
},
{
"match":{
"brand":"b"
}
}
]
}
}
}
위의 데이터는 여전히 일치하지만 상품 A의 브랜드는 b가 아니라 a여야 한다. 이런 현상을 초래한 원인은 구조적인 JSON 문서가 색인 내의 간단한 키 값 형식으로 평평하게 평평하게 되어 있기 때문이다.
{
"memberGoods.title":[
" A",
" B"
],
"memberGoods.brand":[
"a",
"b"
],
"groupId":"A"
}
분명히 상기 데이터가 같은 상품 데이터 간의 관련성을 손실하여 교차 일치하는 현상이 발생했다. 이 문제를 해결하기 위해nestedObject는 하위 문서 데이터의 관련성을 보존하고 만약memberGoods의 데이터 형식이nested로 정의된다면 모든nestedobject는 숨겨진 단독 텍스트로 색인을 만들 것이다.다음과 같습니다.
{
"groupId":"A"
},
{
"memberGoods.title":" A",
"memberGoods.brand":"a"
},
{
"memberGoods.title":" B",
"memberGoods.brand":"b"
}
모든nestedobject에 색인을 만들면object 내부의 필드 간의 관계를 유지할 수 있습니다.검색을 실행할 때'match'와 같은 nested object 결과만 일치합니다.
뿐만 아니라nestedobjects가 색인을 만드는 방식 때문에 조회할 때 루트 텍스트와nested 문서를 연결하는 것은 매우 빠르다. 그들을 단독 텍스트로 간주하는 것과 마찬가지로 빠르다.
nestedobject는 독립적으로 문서를 숨기고 색인을 만들 수 있기 때문에 직접 조회할 수 없습니다.대신 nested 조회나 nested filter를 사용하여 접촉해야 합니다. 자바 언어는 다음과 같습니다.
queryBuilder.must(QueryBuilders.nestedQuery("memberGoods"/** nested */,
QueryBuilders.matchPhraseQuery("memberGoods.title", " A"), ScoreMode.Avg));
그 중에서 memberGoods는 부모 필드입니다. memberGoods.제목은 하위 필드입니다. 위에서 언급한 마지막 매개 변수인 ScoreMode입니다.Avg는 부모 문서의 일치 점수 설정입니다. (Parent hit's score is the average/max/sum/min of all child scores.)
그 밖에 nested 형식의 조회도 주의해야 할 단점이 있다.
1. nested 텍스트를 추가하거나 변경하거나 삭제하려면 전체 텍스트는 색인을 다시 만들어야 합니다.nested 텍스트가 많을수록 대가가 커집니다.
2. 검색 요청은 일치하는 nested 텍스트뿐만 아니라 전체 텍스트를 되돌려줍니다.루트 텍스트를 되돌리는 동시에 가장 일치하는nested 텍스트를 되돌릴 수 있도록 실행 중이지만, 아직 실현되지 않았습니다.
원래 형식이nested가 아니라면elasticsearch 동적 템플릿을 사용하여 필드 형식인nested를 설정할 수 있습니다
{
"index_patterns": [
"*"
],
"order": 0,
"version": 1,
"mappings": {
"dynamic_templates": [
{
"nested_fields": {
"match": "*_nested",
"mapping": {
"type": "nested"
}
}
}
]
}
}
원문:https://www.cnblogs.com/just84/p/10936034.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Elasticsearch의 중첩 조회 소개 및 실례업무상 특정한 유사한 상품을 하나의 관련 그룹으로 집합시켜야 한다. 특정한 상품의 특징에 따라 자신이 있는 관련 그룹을 조회할 수 있도록 지원해야 한다.es의 저장 구조는 다음과 같다. 만약memberGoods가 일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.