고급 쿼리의 ES

1. 복잡한 쿼리

복합 쿼리는 다른 쿼리의 동작을 제어 할 수 있습니다 복잡한 쿼리에 추가하여, 몇 가지 간단한 쿼리 더 복잡한 쿼리 요구 사항을 함께 넣어하는 것입니다.

 

1.1 constant_score

constant_score 쿼리 쿼리 및 반환 문서에서 같은 점수 필터와 일치하는 쿼리 조건을 포장의 다른 형태 일 수도있다. 우리가 검색 결과 순위 검색어의 주파수에 미치는 영향에 대해 우려하지 않는 경우, 당신은 패키지 쿼리 쿼리 필터 또는 필터 문 constant_score 사용할 수 있습니다.

 

다음 예는 다음과 같다 :

 

{

"질문":{

"constant_score": {

"필터":{

"기간":{

"도시": "베이징"

}

}

}

}

}

자바의 예는 다음과 같습니다 :

 

MatchQueryBuilder 쿼리 = QueryBuilders.matchQuery ( "제목", "新闻") .minimumShouldMatch ( "90 %");

QueryBuilders.constantScoreQuery (쿼리) .boost (3.0F);

 

1.2 부울 쿼리

부울 쿼리, must_not, 필터 옵션은 간단한 쿼리 사이의 논리적 연결을 대표한다, 간단한 함께 쿼리를 사용해야 임의의 수의 수 있습니다, 0에서 어디서든 나타날 수 있습니다 각 옵션에 여러 번에 그 의미는 다음과 같습니다 :

 

문서는 논리 연산자의 옵션 MUST 단계 블록에서 쿼리를 일치해야한다.

해야 : 문서를 옵션은 OR 논리 연산에 블록의 위상과 일치하지 않을 수 있습니다해야 쿼리 조건을 일치합니다.

must_not : 반대로, 옵션의 쿼리 조건과 일치하는 문서가 반환해야되지 않습니다.

필터 : 같은 필터 옵션 문서의 쿼리 조건에 일치해야합니다 반환되지만 필터는 득점하지 않고, 단지 필터링을 재생할 수 있습니다.

다음 예는 다음과 같다 :

 

{

"질문":{

"bool에": {

"곰팡내 나게 하다":[

{

"시합":{

"제목": "공유 자전거"

}

},

{

"기간":{

"지구": "창평 구"

}

}

],

"할까요":[

{

"시합":{

"주소": "조양구"

}

}

]

}

}

}

 

1.3 dis_max 쿼리

dis_max 쿼리 유무 부울 쿼리 어떤 접촉도 약간의 차이가 있고, dis_max 질의 지원 다중 동시 쿼리는 모든 종류의 문서 및 쿼리 절 일치를 반환 할 수 있습니다. BOOL 쿼리는 점수가 쿼리의 가장 좋은 점수를 사용하여, dis_max 쿼리의 조합의 쿼리와 일치하는 모든과 다를 수 있습니다.

 

{

"질문":{

"dis_max": {

"tie_breaker": 0.7,

"부스트": 1.2,

"쿼리"[

{

"일치": { "주소": "베이징 조양구"}

},

{

"시합":{

"제목": "베이징 조양구."

}

}

]

}

}

}

1.4 function_score 쿼리

문서 쿼리 점수를 수정할 수 있습니다 function_score 쿼리, 쿼리가 어떤 경우에 매우 유용합니다, 문서가 채점 기능으로 더 높은 비용을 점수 계산과 같은, 당신은 기존의 채점 방법을 대체하는 필터 플러스 사용자 정의 스코어링 함수 방법을 사용할 수 있습니다.

 

사용 function_score 쿼리는 사용자가 쿼리를 정의 할 필요가 있고 여러 점수 기능 점수 기능은 개별적으로 각 문서의 점수를 계산하는 쿼리합니다.

 

{

"쿼리": {

"function_score": {

"쿼리": {

"function_score": {

"쿼리": {

"일치": {

"제목": "자바 编程"

}

},

"기능":

{

"field_value_factor": {

"필드" "가격"

"요소": 0.1,

"수정": "ln1p"

}

}

],

"score_mode": "곱하기",

"max_boost": 10,

"부스트": 1

}

},

"기능"[],

"score_mode": "곱하기",

"boost_mode": "합"

"max_boost": 10,

"부스트": 1

}

}

}

자바의 예는 다음과 같습니다 :

 

MatchPhraseQueryBuilder titleQuery = QueryBuilders.matchPhraseQuery ( "제목", "자바 编程");

FieldValueFactorFunctionBuilder 계수 = ScoreFunctionBuilders.fieldValueFactorFunction ( "가격") 개질제 (FieldValueFactorFunction.Modifier.LN1P) .factor (0.1F).;

FunctionScoreQueryBuilder.FilterFunctionBuilder [] = {filterFunctionBuilders

새로운 FunctionScoreQueryBuilder.FilterFunctionBuilder (요인)

};

FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery (titleQuery, filterFunctionBuilders);

FunctionScoreQueryBuilder 쿼리 = QueryBuilders.functionScoreQuery (functionScoreQuery) .boostMode (CombineFunction.SUM);

1

4

5

6

(7)

자세한 채점 기능

 

1.5 증폭 쿼리

두 쿼리 쿼리 점수 중 하나를 쿼리 점수를 조정 감소 쿼리를 강화하고 함께 패키지 두 쿼리 시나리오의 필요성을 강화.

 

증폭 쿼리는 긍정적 쿼리 점수의 감소에 부정적인 가중치를 표시 negative_boost 문서 점수를 줄일 수 변경, 부정적인 쿼리를 유지 긍정적, 부정적이고 negative_boost 세 부분으로 포함되어 있습니다.

 

뒷면의 시간에 2018 년에 출판 책에 대한 자바 쿼리 제목.

 

{

"질문":{

"밀어": {

"양":{

"시합":{

"제목": "자바"

}

},

"부정":{

"범위":{

"publishAt": {

"LTE": "2018년 1월 1일"

}

}

"negative_boost": 0.2

}

}

}

(13)

자바의 예는 다음과 같습니다 :

 

MatchPhraseQueryBuilder titleQuery = QueryBuilders.matchPhraseQuery ( "제목", "자바");

RangeQueryBuilder publishAt = QueryBuilders.rangeQuery ( "publishAt") LTE ( "2018년 1월 1일.");

QueryBuilders.boostingQuery (titleQuery, publishAt) .negativeBoost (0.2F);

2. 중첩 된 쿼리

2.1 아들 문의

다음은 상점과 상품에, 예를 들어, 그들은 데이터베이스에 서로 다른 종류의 두 테이블의 해당 속하는 당신이 ES 문서 사이의 부모 - 자식 관계를 말할 필요가 상점 및 상품 동료를 실행하려는 경우, 여기에 필드를 지정 이 관계에 참여하는 필드의 형태를 유지하고 관계를 지정 store2product.

 

부모 - 자식 관계 인덱스를 만들기 2.1.1

PUT 저장

{

"매핑": {

"속성": {

"이름": {

"입력": "텍스트를"

"분석기" "ik_max_word"

"search_analyzer": "ik_smart"

},

"store2product": {

"입력": "가입"

"관계": {

"에 storeId": "제품 ID"

}

}

}

}

}

 

2.2.2 추가 관계 문서

부모 문서 (상점)를 추가하고, 부모 필드를 지정

 

PUT 점 / 1

{

"이름": "진짜 음식 프랜차이즈 기록 가게"

"store2product": "에 storeId"

}

아이 문서 (상품)을 추가하고, 동일한 슬라이스에서 자식 문서와 부모 문서가 필요합니다, 당신은 부모 ID 경로 ID를 지정해야

 

PUT 가기 / 2? = 1 라우팅

{

"이름": "차에 양조 크랜베리 ​​분말 매실 주스 순간의 진정한 맛을 작성, 주스 음료 1,000g 신 매화 원"

"store2product": {

"이름": "제품 ID"

"부모": "1"

}

}

가게에서 2.2.3 쿼리 상품

has_parent 쿼리를 사용하여에 storeId로 PARENT_TYPE를 지정

 

저장 / _search을 GET

{

"쿼리": {

"has_parent": {

"PARENT_TYPE": "에 storeId"

"쿼리": {

"일치": {

"이름": "식품 상점"

}

}

}

}

}

자바의 예는 다음과 같습니다 :

 

MatchQueryBuilder NameQuery가 = QueryBuilders.matchQuery ( "이름", "식품 가게");

HasParentQueryBuilder hasParentQueryBuilder 새로운 HasParentQueryBuilder ( "에 storeId"를 NameQuery가 사실) =;

2.2.4 쿼리는 제품 가게에 속하는

has_child 쿼리를 사용하고, 타입 필드의 제품 ID를 지정

 

저장 / _search을 GET

{

"쿼리": {

"has_child": {

"입력": "제품 ID를"

"쿼리": {

"일치": {

"이름": "신 매화 맛"

}

}

}

}

}

자바의 예는 다음과 같습니다 :

 

MatchQueryBuilder NameQuery가 = QueryBuilders.matchQuery ( "이름", "자두 주스 맛");

HasChildQueryBuilder hasChildQueryBuilder 새로운 HasChildQueryBuilder ( "제품 ID", NameQuery가, ScoreMode.None를) =;

 

출처 : https://blog.csdn.net/dwjf321/article/details/103934964

게시 된 277 개 원래 기사 · 원의 찬양 (65) · 전망 380 000 +

추천

출처blog.csdn.net/ailiandeziwei/article/details/104709970