相关文章推荐
刚毅的花卷  ·  android recyclerView ...·  1 年前    · 
爱旅游的茴香  ·  【图】睿蓝汽车X3 ...·  2 年前    · 
鼻子大的松鼠  ·  org.eclipse.aether.tra ...·  2 年前    · 
面冷心慈的开心果  ·  shellexecute ...·  2 年前    · 

现在要根据关键字去检索数据,我们主要是根据name和address去检索数据,给name和address分配配置上相应的score,然后根据评分排序

另外也会传一个城市名称,需要对上面检索出的数据,再加上城市名称的评分,最后再排序

比如说有3条数据如下

name address cityName
1 环球港酒店 上海环球港 上海
2 陆家嘴酒店 陆家嘴酒店 天津
3 环球港酒店 天津环球港 天津

我想用关键词 环球港 去检索,另外带上城市名 天津,

首先会根据关键词搜索,忽略分词什么的,搜索出来的会是1和3,然后又有天津的城市名,所以3要排在1前面,数据一即使城市名完全不匹配也无妨,因为name和address是must必须要的,而城市名只是影响评分排序,并不会影响数据初步检索出来,所以1也是会查出的。

 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.should(QueryBuilders.multiMatchQuery(request.getKeyword(), "name", "name.pinyin").boost(nameScore));
        boolQueryBuilder.should(QueryBuilders.multiMatchQuery(request.getKeyword(), "address", "address.pinyin").boost(addressScore));
        boolQueryBuilder.should(QueryBuilders.matchQuery("cityName", request.getCityName()).boost(cityScore));

全部用should,结果估计会是即使name和address完全不含关键词,也会因为城市名称匹配而检索出一些不想要的数据。

BoolQueryBuilder queryBuilderAll = QueryBuilders.boolQuery();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.should(QueryBuilders.multiMatchQuery(request.getKeyword(), "name", "name.pinyin").boost(nameScore));
        boolQueryBuilder.should(QueryBuilders.multiMatchQuery(request.getKeyword(), "address", "address.pinyin").boost(addressScore));
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("cityName", request.getCityName()).boost(cityScore);
        queryBuilderAll.must(boolQueryBuilder).should(matchQueryBuilder);

想达到关键词为must,而cityName只是可有可无的should类似的效果,上面写法也是不对。

初步接触es,试了许多种还是不太行,请教下应该如何下手

目前有个需求,是对品牌信息进行检索。数据结构大致如下:现在要根据关键字去检索数据,我们主要是根据name和address去检索数据,给name和address分配配置上相应的score,然后根据评分排序另外也会传一个城市名称,需要对上面检索出的数据,再加上城市名称的评分,最后再排序比如说有3条数据如下 name address cityName 1 环球港酒店 上海环球港 上海 2 陆家嘴酒店 陆家嘴酒店 天津 .. 转载并且补充:https://mp.weixin.qq.com/s/0g86s-o7kgn8ZUxA3UBc0w 请看原文 读者提问:ES 的 权重 排序 有没有示列,参考参考? 刚好之前也稍微接触过,于是写了这篇文章,可以简单参考下。 在很多复杂的业务场景下, 排序 的规则会比较复杂,单一的降序,升序无法满足日常需求。不过 ES 中提供了给文档加 权重 的方式来 排序 ,还是挺好用的。 首先初始化三条测试 数据 ,方便查看效果: POST score-test/_doc "id": 1, "title":
Elasticsearch 搜索 引擎Suggest查询建议- 权重 重要:在加载 数据 数据 到es时,对索引字段“suggest_name”设置的 进行 修改 原:对索引字段直接 进行 ,如:"suggest_name": "空调" 改:对索引字段 进行 编制,加入es的提供的 权重 判断,改为设 为: "suggest_name": { "input": "空调", "weight": 50 备注: 50 为 ,1个字在整个字符串中的占比,比如“空”就占 50%,“调”字类
当我们遇到这样的场景时: 搜索 标题中包含 java 的帖子,同时呢,如果标题中包含hadoop或 elasticsearch 就优先 搜索 来,同时呢,如果一个帖子包含 java hadoop,一个帖子包含 java elasticsearch ,包含hadoop的帖子要比 elasticsearch 优先 搜索 来。 解决这个需求可以使用boost 权重 来控制。 搜索 条件的 权重 ,boost,可以将某个 搜索 条件的 权重 加大,此时当匹配这个 搜索 条件和匹配另一个 搜索 条件的document,计算relevance score时,匹配 权重 更大
Elasticsearch 中,可以使用 "function_score" 查询来实现多字段的 权重 排序 。 "function_score" 查询允许您为每个文档计算一个分数,并在查询结果中按该分数 排序 。可以使用 "boost_mode" 参数来指定怎样组合每个字段的分数。例如,可以使用 "sum" 模式将所有字段的分数相加,或使用 "avg" 模式计算所有字段的平均分数。 具体查询示例:
文章目录1. maven配置2. 等 查询3. 范围查询4. 模糊查询5. 多条件查询6. 集合查询7. 使用should查询8. should和must配合查询9. 有 查询10. 分页查询 开发过程中多使用ES的 java API,通过 java API来对ES的索引 进行 操作,对ES的操作一般都是通过构建QueryBuilder对象来 进行 操作。下面介绍几种QueryBuilder的构建。 1. maven配置 maven依赖 <dependency> <groupId>org.
public void testAddScore() { * 希望那条记录排名靠前,需要将记录中包含的字段 设置其加权 ,调高加权 ,可以使得排名越靠前。反之,靠后。 SearchResponse response = client.prepareSearch("myblog") .setTypes("article") //只要t.
求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 Deep Learning小舟: 写的不错 共勉~,最近也在开始写博客。大佬们来翻牌啊!( ̄ˇ ̄) elasticsearch如何对搜索出的数据进行主次权重值的搜索排序 wonde2018: 求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 Jashley zxx: 我也试了。浏览器直接输入地址就不是乱码了 求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 Jashley zxx 啊 大禹: 本地不行,线上ok。。😒 求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 啊 大禹: 楼主解决了吗 求解关于下载后,文件名应是中文的为下划线,按照网上方法改成new String(fileName.getBytes("UTF-8"), "ISO8859-1")后下划线变成了乱码 关于从数据库中获得json格式数据,其中中文到前端时变成???