maven-pom

引入high-level-client作为es客户端进行es操作

编写config类配置连接的es

新建util工具类

可以通过构造类链式来设置索引结构,也可以使用json配置相关配置,上面的配置是忽略大小写。

_search 接口 所有的 REST 搜索请求使用_search 接口,既可以是 GET 请求,也可以是 POST 请求,也可以通过在搜索 URL 中指定索引来限制范围。 _search 接口有两种请求方法,一种是基于 URI 的请求方式,另一种是基于 请求体的方式,无论哪种,他们执行的语法都是基于 DSL(ES 为我们定义的查询 语言,基于 JSON 的查询语言),只是形式上不同。我们会基于请求体的方式来 学习。比如说: get kibana_sample_data_flights/_search { “query”:{ “match_all”:{} } } 或 get kibana_sample_data_flights/_search { “query”:{ “match_none”:{} } } 当然上面的查询没什么太多的用处,因为他们分别代表匹配所有和全不匹配。 所以我们经常要使用各种语法来进行查询,一旦选择了要搜索的索引,就需 要配置搜索请求中最为重要的模块。这些模块涉及文档返回的数量,选择最佳的 文档返回,以及配置不希望哪些文档出现在结果中等等。

■ query-这是搜索请求中最重要的组成部分,它配置了基于评分返回的最 佳文档,也包括了你不希望返回哪些文档。

■ size-代表了返回文档的数量。

■ from-和 size 一起使用,from 用于分页操作。需要注意的是,为了确定 第 2 页的 10 项结果,Elasticsearch 必须要计算前 20 个结果。如果结果集合不断 增加,获取某些靠后的翻页将会成为代价高昂的操作。

■ _source 指定_ source 字段如何返回。默认是返回完整的_ source 字段。 通过配置_ source,将过滤返回的字段。如果索引的文档很大,而且无须结果中的 全部内容,就使用这个功能。请注意,如果想使用它,就不能在索引映射中关闭 _ source 字段。

■ sort 默认的排序是基于文档的得分。如果并不关心得分,或者期望许多 文档的得分相同,添加额外的 sort 将帮助你控制哪些文档被返回。 结果起始和页面大小 命名适宜的 from 和 size 字段,用于指定结果的开始点,以及每“页”结果的 数量。举个例子,如果发送的 from 值是 7,size 值是 5,那么 Elasticsearch 将返回 第 8、9、10、 11 和 12 项结果(由于 from 参数是从 0 开始,指定 7 就是从第 8 项结果开始)。如果没有发送这两个参数,Elasticsearch 默认从第一项结果开始 ( 第 0 项结果),在回复中返回 10 项结果。

例如 get kibana_sample_data_flights/_search { “from”:100, “size”:20, “query”:{ “term”:{ “DestCountry”:”CN” } } } 但是注意,from 与 size 的和不能超过 index. max_result_window 这个索引配 置项设置的值。默认情况下这个配置项的值为 10000,所以如果要查询 10000 条以 后的文档,就必须要增加这个配置值。

例如,要检索第 10000 条开始的 200 条数 据,这个参数的值必须要大于 10200,否则将会抛出类似“ Result window is too large’的异常。 由此可见,Elasticsearch 在使用 from 和 size 处理分页问题时会将所有数据 全部取出来,然后再截取用户指定范围的数据返回。所以在查询非常靠后的数据 时,即使使用了 from 和 size 定义的分页机制依然有内存溢出的可能,而 max_ result_ window 设置的 10000 条则是对 Elastiesearch 的一.种保护机制。

那么 Elasticsearch 为什么要这么设计呢?首先,在互联网时代的数据检索应 该通过相似度算法,提高检索结果与用户期望的附和度,而不应该让用户在检索 结果中自己挑选满意的数据。以互联网搜索为例,用户在浏览搜索结果时很少会 看到第 3 页以后的内容。假如用户在翻到第 10000 条数据时还没有找到需要的结 果,那么他对这个搜索引擎一定会非常失望。

_source 参数 元字段_source 中存储了文档的原始数据。如果请求中没有指定_source, Elasticsearch 默认返回整个_ source, 或者如果_ source 没有存储,那么就只返 回匹配文档的元数据:_ id、_type、_index 和_score。 例如: get kibana_sample_data_flights/_search { “query”:{ “match_all”:{} },”_source”:[“OriginCountry”,”DestCountry”] } 你不仅可以返回字段列表,还可以指定通配符。例如,如果想同时返回” DestCountry “和” DestWeather “字段,可以这样配置_ source: “Dest*”。 也可以使 用通配字符串的数组来指定多个通配符,例如_ source:[” Origin*”, “* Weather “]。 get kibana_sample_data_flights/_search { “query”:{ “match_all”:{} },”_source”:[“Origin*”,”*Weather”] } 不仅可以指定哪些字段需要返回,还可以指定哪些字段无须返回。

比如: get kibana_sample_data_flights/_search { “_source”:{ “includes”:[“*.lon”,”*.lat”], “excludes”:”DestLocation.*” } } 排序 大多搜索最后涉及的元素都是结果的排序( sort )。如果没有指定 sort 排序选 项,Elasticsearch 返回匹配的文档的时候,按照_ score 取值的降序来排列,这样 最为相关的(得分最高的)文档就会排名在前。为了对字段进行升序或降序排列, 指定映射的数组,而不是字段的数组。通过在 sort 中指定字段列表或者是字段映 射,可以在任意数量的字段上进行排序。 例如: get kibana_sample_data_flights/_search { “from”:100, “size”:20, “query”:{ “match_all”:{} },”_source”:[“Origin*”,”*Weather”], “sort”:[{“DistanceKilometers”:”asc”},{“FlightNum”:”desc”}] }