탄성 검색의 검색 API (쿼리 DSL), 필드 유형의 쿼리, 복잡한 쿼리

API는 관련 쿼리 API의 탄성 검색 (이하 ES)에 저장된 데이터입니다 검색, 당신은 MySQL을 선택 성명에서 비교 될 수있다. 검색에서 ES는 URI 검색으로 나누어 져 쿼리 DSL 쿼리 DSL 기반 구문을 갔다,뿐만 아니라 우리는 다음과 같은 쿼리와 ES 처리를 학습에 초점을 맞추고 자 :

엔드 포인트로 쿼리 DSL의 _search의 ES는 복잡한 쿼리와 쿼리 필드 클래스 ()으로 구분된다. 필드 클래스 쿼리 와 같은 특정 필드 등 일치, 용어로만 쿼리,;  복잡한 쿼리 : 쿼리는 부울 문의 하나 개 이상의 필드 일 수있다.


단어 일치와 전체 일치 : 클래스 쿼리 필드는 두 가지 범주를 포함한다 . 워드 매치 (기간 레벨 쿼리) :하지 쿼리 문 워드 프로세싱, 직접 매칭 필드의 인덱스 반전, 완전 일치 (전체 텍스트 쿼리) : 텍스트 입력 필드 지정에 대한 전체 텍스트 검색을, 그것은 것입니다 첫 번째 쿼리 문 워드 가공, 예를 들어, 쿼리 텍스트는 "도로의 I 측"입니다 입력, ES는 "I"단어의 역할 단어, "에서"다음 "도로"그래서 몇 마디하고는 일치 갈 것입니다.

서적 쿼리 클래스 필드

서적 전체 일치 : 일치, match_phrase, QUERY_STRING, 쿼리를 simple_query_string를 포함한다;

서적 일치하는 쿼리

경기 쿼리 클래스 필드 전체 텍스트 검색을 기반으로 가장 기본적인 쿼리 구문은 다음과 같이 API를 사용 :

那么这里经过分词后的this、is、a、test各个单词之间就是默认为"或"的匹配关系,可以通过operator关键字来显式设置各个单词间的匹配关系,如下:

也可以通过minimum_should_match参数来设置控制需要匹配的单词数,比如你的文档里username存的内容是"this is a java enginer",那么通过下面的查询语句可以控制查询文本最少要匹配到"java"、"enginer":

서적 match_phrase query

match_phrase也是对字段进行检索,和match的区别在于:match_query是有顺序要求的,而match是无序的。

可以通过slop参数来控制单词之间的允许间隔:

서적 query_string query

query_string支持多字段匹配:

서적 simple_query_string语法与query_string类似,但是不支持AND、OR、NOT,分别需要用"+"、"|"、"-"号代替。

서적 单词匹配:包括term、terms、range查询语句:

서적 term query

term查询语句不会对查询语句进行分词处理,直接拿查询输入的文本去检索,如下是官方文档测试案例,非常清晰:

서적 terms query

terms和term的查询语法基本类似,但terms支持的查询文本可以多个:

此外,terms还支持文档元数据信息的几个字段值查询:

서적 range query

范围查询主要用于date或number类型的字段查询中,和term、terms查询一样,不进行查询时分词:

其中gte表示大于等于,lte表示小于等于,gt表示大于,lt表示小于,boost表示对此次query进行相关性算分权重,默认是1.0

在range范围查询中,es提供了一种更加简便的日期计算,now表示当前时间,时间单位y:年,M:月,d:天,H:时,m:分,s:秒,所以now-3y就表示当前时间减去3年后的时间。

如上几种是常用的字段类查询语法,更多的查询语法可以参看官网: https://www.elastic.co/guide/en/elasticsearch/reference/6.3/index.html,里面的Query DSL项。


서적 复合查询

复合查询就是指可以对多个字段过滤筛选,类比mysql的where多条件查询,es的复合查询包括Constant Score Query、Bool Query、Dis Max Query、Function Score Query、Boosting Query,这里详细说一说用的比较多的Bool Query。

Bool Query是由一个或多个bool子句构成的,包括:

must

根据must中的条件过滤文档,返回的结果文档必须严格匹配条件,会影响相关性算分

filter

根据must中的条件过滤文档,返回的结果文档必须严格匹配条件,和must不同的是,filter不会影响相关性算分

should

根据should中的条件进行筛选,返回的结果文档应该包含should的条件,影响相关性 算分

must_not

根据must_not中的条件过滤文档,返回的结果文档必须不包含must_not条件,会影响相关性算分

Bool查询的基本语法如下:

1、must、must_not、should支持数组,同时filter的查询语句,es会对其进行智能缓存,因此执行效率较高,在不需要算分的查询语句中,可以考虑使用filter替代普通的query语句;

도 2를 참조하면, 쿼리는 모두 반드시 포함하고 있어야하는 것보다 상기 조건을해야하기 때문에, 더 높은 우선 순위를해야하는 조건을 만족시킬 수 있어야하지만, 만족하면 조건은 상관 계수 포인트는 증가 될 것이다한다;

(3)가 만족되어야 파라미터 minimum_should_match 백분율 또는 상태의 수를 제어하기 위해 사용될 수있다;

4하며, 다양한 조건과의 관계, 및 복수의 조건 중, 복수의 조건을 포함하는 문 또는 관계해야 must_not 경우이다.


서적 이전 : 탄성 검색의 사용자 정의 매핑 구조

서적 다음 : 카운트 API의 탄성 검색 (조건에 맞는 레코드의 수를 얻을)

서적 참고 : 에스 공식 문서 https://www.elastic.co/guide/en/elasticsearch/reference/6.3/index.html

게시 된 202 개 원래 기사 · 원의 찬양 (571) · 조회수 1,470,000 +

추천

출처blog.csdn.net/fanrenxiang/article/details/86477019