技术标签: ElasticSearch 精确查询 其他 分词 ES
项目中,需要精确查询的一个ES字段,为text类型,text是要被分词的,整个字符串根据一定规则分解一个个term。因此一般情况下,text类型的字段,不能精确查询,keyword类型的可以使用termQuery查询。
这种情况下可以使用matchPhrasePrefixQuery(...)来精确查询被分词的字段,然后再过滤一次。
代码如下:
public long countByaddress(String address) {
/**
* 对于matchPhrasePrefixQuery("address", address).slop(0)。
* matchPhrasePrefixQuery表示短语查询。该短语会被分词产生一个词条列表。
* slop(n)表示使用该词条列表查询时,包含该词条列表的内容但是每个词条相隔的其他词条个数为n。
* slop(0)就是使用该词条列表 查询时,每个词条必须紧接在一起,是一个完整的短语,效果相当于不分词。
*
*
* 但是,这种方式也无法实现精确查询,比如address为”宜兴埠红旗路北7号“,查询时,”北辰区宜兴埠红旗路北7号“
* 也会被匹配,只要包含“宜兴埠红旗路北7号”的短语或者句子,都会被匹配。因此使用字符串比对的方式要再做一次过滤,才能实现分词后的精确查询
*
*/
MatchPhrasePrefixQueryBuilder queryBuilder=QueryBuilders.matchPhrasePrefixQuery("address", address).slop(0);
//QueryBuilder queryBuilder = QueryBuilders.matchQuery("address", address);
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
String[] queryColumnArray = new String[]{"id","address","name"};
searchSourceBuilder.fetchSource(queryColumnArray, null);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(queryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse response = null;
try {
response = esConfig.getClient().search(searchRequest);
} catch (IOException e) {
throw new RuntimeException("查询ES异常");
}
long count=0;
for(SearchHit hit : response.getHits().getHits()){
Map<String, Object> map = hit.getSourceAsMap();
String entid = (String) map.get("entid");
String address2 = (String) map.get("address");
//也可以使用length判断
if(address.equals(address2)){
count++;
}
}
return count;
}
上面的代码逻辑是查询有多少相同的地址。除了使用matchPhrasePrefixQuery(...),还需使用equals或者length再做一次过滤。
需求:家中各种设备比较杂,win10台式机,MacBookAir,Linux笔记本,Android手机,iPad等,希望能有个地方能让各种设备都可以共享文件。简而言之就是个家庭内网下的私人百度网盘。前言:解决上述需求已经有了很成熟的解决方案,群晖/威联通肯定比我下面的方案更稳定好用。如果你只是有和我类似的需求,嫌麻烦又对价格不敏感,出门左转京东下单不要犹豫。但如果你更享受解决问题的过程,想借机学点..._ros smb
砝码称重内容:砝码称重(30分)设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重要求:输入方式:a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)输出方式:Total=N(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)如输入:1_1_0_0_0_0 (注:下划线表示空格)输出:TOTA_砝码称重
http://baike.baidu.com/view/33701.htm即插即用编辑PNP是Plug-and-Play(即插即用)的缩写。它的作用是自动配置(低层)计算机中的板卡和其他设备,然后告诉对应的设备都做了什么。PnP的任务是把物理设备和软件(设备驱动程序)相配合,并操作设备,在每个设备和它的驱动程序之间建立通信信道。换种说法,PnP分配下列资源给设备...
先了解一下cache基础:一级缓存 Hibernate 的一级缓存是由 Session 提供的,因此它只存在于 Session 的生命周期中,当程序调用 save(),update(),saveorupdate() 等方法 及调用查询接口 list,filter,iterate 时,如 session 缓存中还不存在相应的对象, Hibernate 会把该对象加入到一级缓存中, 当 Session 关闭的时候该 Session 所管理的一级缓存也会立即被清除 _jpa entitymanager cache
我们写的是Java程序,但是我们需要使用浏览器访问到,而浏览器需要连接到web服务器,所以我们需要在web服务器中注册我们写的servlet,并且给其一个浏览器能访问的路径;_为什么要设置映射路径
1、深入浅出Hadoop实战开发(升级版)链接:https://pan.baidu.com/s/1jIAahZg 密码:pin42、SpringBoot教程链接:https://pan.baidu.com/s/1cz1bNC密码:uiqd3、大数据高并发系统架构实战方案课程链接:https://pan.baidu.com/s/1boCacO3密码_it学习内容分享
@echo off::方式一,简化版本REM SET str="%date:~0,4%-%date:~5,2%-%date:~8,2%"REM md %str%::方式二,完整版本::SET str="%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%"::md %str%for /f "delims=" %%a in ('dir /ad /b /s D:\06tmp\^|sort /r') do (._for /f "delims=" %%a in
ubuntu桌面版本和服务器版本之间的区别1、背景2、区别3、判定1、背景最近下载ubuntu18.04.5,官网:http://releases.ubuntu.com/18.04/可以看到有两个版本:桌面镜像和服务器镜像;那么这两个版本有什么区别呢?2、区别桌面版:安装了GUI图形界面的管理软件,便于用户操作。服务器版:没有安装GUI图形界面的管理软件,但安装一些网络服务软件。总结:在linux内核的基础上,安装了不同的软件。服务器版可以装上桌面变成桌面版;同理桌面版装上相关软件,_ubuntu live server 区别
第一步: △如果不打开是识别不到 video9 的打开 Camera第二步:_adb查看摄像头信息
最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题来了,server2没有该用户的session,所以需要用户重新登录,这时的用户体验会非常不好,所以如何实现多台server之间共享session,让用户状态得以...
目录Anaconda简介1.下载1.1 创建一个文件夹来存放安装包1.2 进入到文件夹里面:1.3 wget命令行下载:1.4 下载情况:2.开始安装:2.1 进入到存放文件的位置:2.2 运行 .sh 文件:2.3 进入注册信息页面,输入yes:2.4 阅读注册信息,然后输入yes;查看文件即将安装的位置,按enter,即可安装:2.5 进入安装过程:2.6 安装完成后,收到加入环境变量的提示信息,输入yes:2.7 看到这些信息..._如何验证自己ubuntu系统中的anaconda3安装好了
在使用Jmeter进行压测时间较长时可能会出现 java.lang.OutOfMemoryError:Java heap space 这样的报错。原因为:默认配置分配的堆内存不够大解决办法:1、首先找到jmeter的安装目录,进入到bin目录下。2、创建一个名称为:setenv.sh 的文件3、内容为export HEAP="-Xms4G -Xmx4G"注:由于每个机器的内存配置不一样,根据自己的需求修改参数配置,最好不要超过物理机内存的一半..._jmeter oom