目录:
(1)DSL查询语法-DSL查询分类和基本语法
(2)DSL查询语法-全文检索查询
(3)DSL查询语法-精确查询
(4)DSL查询语法-地理查询
(5)DSL查询语法-相关性算分
(6)DSL查询语法-FunctionScoreQuery
(7)DSL查询语法-BooleanQuery
(1)DSL查询语法-DSL查询分类和基本语法
我们利用RestClient往ES中导入了很多数据,数据的存储不是目的,最终是从 海量的数据中,检索出你所需要的哪些,这就用到了ES的搜索功能了
查询所有:是不需要查询条件的:
(2)DSL查询语法-全文检索查询
match:代表有条件,field:字段根据那个字段查询 text:要搜索的内容
all是前面学习表映射时的多个字段的结合字段
查询条件:外滩 全文检索字段all 条件含有外滩
查询条件:外滩如家
multi_match 多个点字段搜索:在多个字段中查询 含有外滩如家的
通过使用all和下面的多个字段搜索是一样的,那么使用那个呢?参与搜索的字段越多查询效率越低推荐使用all的方法,不要查询整个字段而是把字段copy到一个字段中去查
(3)DSL查询语法-精确查询
这些类型有共同的特点,就是他们的值是一个不可分割的整体,在搜索的时候,对搜索的条件也有要求,查询的条件它也不需要分词,而且搜索条件要和查找的字段值完全匹配
这几个字段都是keyword 或数值
term:根据词条精确查询:查询city为上海的
这时搜索的所有信息city都是上海的
它是精确匹配的,不会进行分词了:杭州上海会搜索不到
range:根据条件范围查询
搜索price大于等于100,小于等于300
(4)DSL查询语法-地理查询
据中心点15公里
据中心地5公里
(5)DSL查询语法-相关性算分
相关性算分:比如说我们之前搜索外滩如家这样的酒店信息,我们发现同时包含外滩如家的酒店排名靠前,只包含外滩和如家的酒店排名靠后,这就是相关性了,我们es会对相关性打分,相关度越高打分越高,排名越靠前
IDF:如家在三个文档中都出现了,权重为0 虹桥只有第一条出现了这条文档的权重较大
BM25算法的影响不会受词频的影响
(6)DSL查询语法-FunctionScoreQuery
如果想要人为的控制文档的排名,就用到function score query了
默认加权模式是乘
加权后跑到第一名了:
更改加权模式:sum
(7)DSL查询语法-BooleanQuery
Function Score Query计算相关性算分
Boolean Query:不是计算相关性算分,而是把多个查询语句组合在一起,形成新的查询,被组合的查询称为子查询
must_not和filter 不参与算分 ,它的返回结果是或否 true和false,如果子查询较多,都参与算分,会非常影响性能
ES会把filer的查询,放到缓存里面,将来在查询的时候,会近一步提高性能
有以上四种组合关系,除了跟算分相关的,一般是关键字,放到must和should里面
其他的都应该放到must_not和filter里面,尽可能的减少算分提高查询的效率
下面图片的查询,搜索框的内容关键字的搜索可以放到must里,因为它参与算分
过滤条件:品牌也好价格也好,放到must_not或者filter里面,放到这里面不参与算分