版本定位:7.x
总结的坑:
数据迁移请求:
- POST /_reindex?slices=9&refresh&wait_for_completion=false
- {
- "source": {
- "index": "source_index",
- "size": 1000
- },
- "dest": {
- "index": "target_index"
- }
- }
4. ik分词器版本问题:如果没有elasticseach对应的版本的ik,可以下载相近版本ik,并把ik里的properties文件的elaticsearch.version改成应用版本即可。
5. 时间格式转换,如果把原来的text-keword类型直接更改为date类型,那么原有的时间格式的数据转换失败,需在更换为date类型时,并指定时间格式:"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"。
6.得分排序时,必需要匹配查询,优先使用自定义得分搜索排序
7.为空时给个设定的默认值,以便布尔查询过滤的时候可以查出:示例:
- PUT /es_test
- {
- "mappings": {
- "properties": {
- "tags": {
- "type": "keyword",
- "null_value": "null" // 为空时,默认为"null",显示为null。用布尔过滤的单词条可以查出
- },
- "brand_id": {
- "type": "keyword" // 没有加空值默认值时,显示依然为null。但是不能查出。
- }
- }
- }
- }
8.默认查询前一万条数据,如果分页导致查询一万条之后的数据,需要设置
- PUT /es_test/_settings
- {
- "index":{
- "max_result_window":10000000
- }
- }
9.聚合去重
- GET /es_test/_search
- {
- "track_total_hits": true,
- "query": {
- "match_all": {}
- },
- "collapse": {
- "field": "product_id"
- },
- "aggs": {
- "search_total": {
- "cardinality": {
- "field": "product_id"
- }
- }
- }
- }
-
-
- // 对应Java代码
- // 折叠去重“product_id”
- CollapseBuilder collapseBuilder = new CollapseBuilder(SearchConstants.QUERY_PRODUCT_INFO_BOOL_QUERY_COLUMN.PRODUCT_ID);
- // 聚合去重计算总数,这里聚合存在误差,设置精确度最大
- AggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality(SearchConstants.AGG_CONSTRANTS.CARDINALITY_NAME).field(SearchConstants.QUERY_PRODUCT_INFO_BOOL_QUERY_COLUMN.PRODUCT_ID)
- .precisionThreshold(40000L);
其中返回值:
10.分词匹配时,特殊英文符号解析时会报错,要对字符串转义过滤后再搜索。转义方法:
public static String escape(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':'
|| c == '^' || c == '[' || c == ']' || c == '\"' || c == '{' || c == '}' || c == '~'
|| c == '*' || c == '?' || c == '|' || c == '&' || c == '/') {
sb.append('\\');
}
sb.append(c);
}
return sb.toString();
}
或者直接用escape方法
最后还附上官网地址:Elasticsearch Guide [8.12] | Elastic