个人 服务器 linux 建网站,常用网站推广方法的适用性,怎么创建公众号微信,全新升级网站文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 elasticsearch最擅长的是
搜索和
数据分析。 数据搜索
DSL实现
查询文档
常见的查询类型包括#xff1a;
查询所有#xff1a;查询出所有数据#xff0c;一般测试用。例如#xff1a;match_all全文检索… 文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 elasticsearch最擅长的是
搜索和
数据分析。 数据搜索
DSL实现
查询文档
常见的查询类型包括
查询所有查询出所有数据一般测试用。例如match_all全文检索full text查询利用分词器对用户输入内容分词然后去倒排索引库中匹配。例如 match_querymulti_match_query 精确查询根据精确词条值查找数据一般是查找keyword、数值、日期、boolean等类型字段。例如 idsrangeterm 地理geo查询根据经纬度查询。例如 geo_distancegeo_bounding_box 复合compound查询复合查询可以将上述各种查询条件组合起来合并查询条件。例如 boolfunction_score
全文检索查询 使用场景
全文检索查询的基本流程如下
对用户搜索的内容做分词得到词条根据词条去倒排索引库中匹配得到文档id根据文档id找到文档返回给用户
比较常用的场景包括
商城的输入框搜索百度输入框搜索 可以看到两种查询结果是一样的为什么
因为我们将brand、name、business值都利用copy_to复制到了all字段中。因此你根据三个字段搜索和根据all字段搜索效果当然一样了。
但是搜索字段越多对查询性能影响越大因此建议采用copy_to然后单字段查询的方式。
精准查询 精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有
term根据词条精确值查询range根据值的范围查询 范围查询一般应用在对数值类型做范围过滤的时候。比如做价格范围过滤。 精确查询常见的有哪些
term查询根据词条精确匹配一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询根据数值范围查询可以是数值、日期的范围
地理坐标查询 附近查询也叫做距离查询geo_distance查询到指定中心点小于某个距离值的所有文档 复合查询 复合compound查询复合查询可以将其它简单查询组合起来实现更复杂的搜索逻辑。常见的有两种 fuction score算分函数查询可以控制文档相关性算分控制文档排名 bool query布尔查询利用逻辑关系组合多个其它的查询实现复杂搜索 function score的运行流程如下 1根据原始条件查询搜索文档并且计算相关性算分称为原始算分query score 2根据过滤条件过滤文档 3符合过滤条件的文档基于算分函数运算得到函数算分function score 4将原始算分query score和函数算分function score基于运算模式做运算得到最终结果作为相关性算分。 function score query定义的三要素是什么
过滤条件哪些文档要加分算分函数如何计算function score加权方式function score 与 query score如何运算
布尔查询 布尔查询是一个或多个查询子句的组合每一个子句就是一个子查询。子查询的组合方式有
must必须匹配每个子查询类似“与”should选择性匹配子查询类似“或”must_not必须不匹配不参与算分类似“非”filter必须匹配不参与算分
比如在搜索酒店时除了关键字搜索外我们还可能根据品牌、价格、城市等字段做过滤 每一个不同的字段其查询的条件、方式都不一样必须是多个不同的查询而要组合这些查询就必须用bool查询了。
需要注意的是搜索时参与打分的字段越多查询的性能也越差。因此这种多条件查询时建议这样做
搜索框的关键字搜索是全文检索查询使用must查询参与算分其它过滤条件采用filter查询。不参与算分
示例
需求搜索名字包含“如家”价格不高于400在坐标31.21,121.5周围10km范围内的酒店。
分析
名称搜索属于全文检索查询应该参与算分。放到must中价格不高于400用range查询属于过滤条件不参与算分。放到must_not中周围10km范围内用geo_distance查询属于过滤条件不参与算分。放到filter中 搜索结果处理
RestClient实现