代码拉取完成,页面将自动刷新
搜索单元
- 概念:用于搜索的“一个”逻辑单元,小括号括起,并且每个括号是一个field的比较
- 书写形式:(field:value)
- Note:(a:1)、(1<a<10) 、(a>5&a<10) 都是单个field的比较
值函数
- 概念:函数解析使用{}括起(未使用函数解析的均认为是term解析查询)
- 书写形式:{term:中国西域}
- 函数穷举:
- {term:中国西域} ——词条查询
- {match:中国西域} ——匹配(支持分词)
- {prefix:中国西域} ——前缀
- {wildcard:W?F*HW} ——通配符
- {regexp:W[0-9].+} ——正则
- Node:(supplierName:{wildcard:北京商贸*}) 查询已北京商贸开头的相关信息
范围查询
- 概念:范围查询针对集合区间在后台处理做了抽象,支持任意的开闭原则及范围区间查询 支持基本数据类型范围查询及日期类型范围查询
- 书写形式:(value1<field<=value2)、(field<v2)、(field<v2)
- Node:
- 闭区间查询保证字段在值的中间如: v1<field<v2
- 开区间查询保证字段在值的左边如: field>v1 或者 field<v2
- 日期范围查询日期格式为 “yyyy-MM-dd HH:mm:ss”
取反查询运算
- 概念:满足条件的反向,只能用于查询语句的前面 用!表示
- 书写形式: !(a<=10) 、!(&(a:1|2|3)&(b:zhangsan))
- Node: !(a<10) = (a>=10)
逻辑运算符
- 概念: 用于单元中与 或 的逻辑运算,用& | 表示
- 书写形式: !(a<=10) 、!(&(a:1|2|3)&(b:zhangsan))
- Node: !(a<10) = (a>=10)
String eql = "|(attrIds:2232012366099328|189)|(attrIds:2292774003989889|2300097498406272)";
BoolPager boolPager = EqlToPagerConverterUtils.convertToPager(eql);
boolPager.setPageNo(pageNo);
boolPager.setPageSize(pageSize);
boolPager.set_index(dto.getIndexName().trim());
boolPager.set_type(dto.getIndexType().trim());
if(StringUtils.isNotBlank(dto.getSortName())) {
if("desc".equals(dto.getSortOrder())){
sortField.put(dto.getSortName().trim(), SearchFactor.DESC);
}else {
sortField.put(dto.getSortName().trim(), SearchFactor.ASC);
}
boolPager.setSortFields(sortField);
}
BoolPager resultPager = BaseSearch.boolQuery(transportClient, boolPager);
System.out.println(resultPager.getResult());
IK分词器进行二次开发,支持数据库扫描热词、停止词功能。 添加ElasticSearch TokenFilter 扩展,增加以数据库为数据源的联想词功能,源码下载
联想词ik_synonym
功能扩展
curl -XPUT http://XXX.XXX.XXX.XXX:9200/g_i -d '
{
"settings":{
"refresh_interval":"1s",
"number_of_replicas":1,
"number_of_shards":1,
"analysis":{
"filter":{
"by_tfr":{
"type":"stop",
"stopwords":[" "]
},
"by_sfr":{
"type":"ik_synonym",
"ignore_case":true,
"expand":true
}
},
"analyzer":{
"by_smart":{
"type":"custom",
"char_filter": [
"html_strip"
],
"tokenizer":"ik_smart",
"filter":[
"by_sfr"
]
},
"by_max_word":{
"type":"custom",
"char_filter": [
"html_strip"
],
"tokenizer":"standard",
"filter":[
"by_sfr"
]
}
}
}
},
"mappings":{
"g_t": {
"properties": {
"goodsName": {
"type": "text",
"analyzer": "by_smart"
}
}
}
}
}'
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:search="http://www.fast-search.com/schema/search"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.fast-search.com/schema/search http://www.fast-search.com/schema/search/search-1.1.xsd">
<search:client id="esConnect">
<search:cluster-servers cluster-name="elasticsearch" ping-timeout="10s" ignore-cluster-name="true" cluster-sniff="true">
<search:node-address value="XXX.XXX.XXX.XXX:9300"/>
<search:node-address value="XXX.XXX.XXX.XXX:9300"/>
<search:node-address value="XXX.XXX.XXX.XXX:9300"/>
<search:node-address value="XXX.XXX.XXX.XXX:9300"/>
</search:cluster-servers>
</search:client>
</beans>
BoolPager boolPager = new BoolPager();
boolPager.setPageNo(pageNo);
boolPager.setPageSize(pageSize);
List<ValuePackage> vps = new ArrayList<>();
List<ValueEntity> vs = new ArrayList<>();
vs.add(new ValueEntity.Builder("categoryId",new Object[]{categoryId.toString()}).setNot().build());
vs.add(new ValueEntity.Builder("supplierName",new Object[]{"*"+supplierName+"*"}).rule(SearchType.WILDCARD_QUERY).build());
vs.add(new ValueEntity.Builder("orderStatus",new Object[]{1}).build());//接单状态 1正常接单
vs.add(new ValueEntity.Builder("isDel",new Object[]{0}).build());//供应商状态 1正常 2暂停接单
if(isSpecial != null && isSpecial == 1){//自营订单传 1 限制可接自营供应商才可接该单 进行限制
vs.add(new ValueEntity.Builder("isSpecial",new Object[]{isSpecial}).build());//供应商状态 1正常 2暂停接单
}
if(isTest != null){//自营订单传 1 限制可接自营供应商才可接该单 进行限制
vs.add(new ValueEntity.Builder("isTest",new Object[]{isTest}).build());
}
ValuePackage vp = new ValuePackage();
vp.setEntitys(vs);
vps.add(vp);
boolPager.setQuery(vps);
boolPager.set_index(IndexConf.supplierIndex);
boolPager.set_type(IndexConf.categoryType);
boolPager.setFields(new String[]{"supplierId","supplierName"});//获取供应商id和供应商名称
boolPager = BaseSearch.boolQuery(client,boolPager);
ValuePackage类似于一个查询实体包 ,是包装了多个查询逻辑单元组合的查询集合,如果对ElasticSearch Restful调用
``
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型