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