elasticsearch之解除索引只读问题filtersort解除索引最大查询数的限制reindex迁移数据boost条件权重控制
Posted 爱上口袋的天空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch之解除索引只读问题filtersort解除索引最大查询数的限制reindex迁移数据boost条件权重控制相关的知识,希望对你有一定的参考价值。
1、解除索引只读问题
1、查看是否存在只读属性
GET /personal_report_chapter_es/_settings
2、解除只读命令
PUT _settings "index": "blocks": "read_only_allow_delete":"false"
2、filter命令
返回的文档必须满足filter子句的条件。但是跟Must不一样的是,不会计算分值, 并且可以使用缓存。
从上面的描述来看,你应该已经知道,如果只看查询的结果,must和filter是一样的。区别是场景不一样。如果结果需要算分就使用must,否则可以考虑使用filter。
GET kibana_sample_data_ecommerce/_search "size": 1000, "query": "bool": "must": [ "term": "currency": "EUR" ], "filter": "range": "order_date": "gte": "2020-01-25T23:45:36.000+00:00", "lte": "2020-02-01T23:45:36.000+00:00"
简单来讲,如果你的业务场景不需要算分,使用filter可以真的让你的查询效率飞起来。
3、sort命令
sort命令用来对查询的数据针对某些字段进行排序
3.1、查询上映在2016到2018年的所有的电影,再根据上映时间的倒序进行排序
GET movies/_search "query": "range": "year": "gte": 2016, "lte": 2018 , "sort": [ "year": "order": "desc" ]
3.2、
sort
支持设置多个字段参与排序GET /offline_sales/_search "sort" : [ "sale_date" : "order" : "asc", "total_price", "order_id" : "desc" , "_score" ]
4、解除索引最大查询数的限制
方案1:在设置索引属性时解除索引最大查询数的限制
put _all/_settings "index.max_result_window":200000
_all表示所有索引,针对单个索引的话修改成索引名称即可
方案2::在创建索引的时候加上
"settings": "index": "max_result_window": 500000
这样设置完毕之后还不行,如果继续使用原来的API进行查询,查询到的结果最大数量仍然是10000,这时候需要在API中添加这样一行代码:
searchSourceBuilder.trackTotalHits(true);
5、使用reindex命令迁移数据
POST _reindex "source": "index": "old_index", "size":1000 //可选,每次批量提交1000个,可以提高效率,建议每次提交5-15M的数据 , "dest": "index": "en_law"
将老索引的数据迁移到新索引中
6、 boost条件权重控制
我们在使用ES进行查询时常常遇到这样的场景:需要根据用户输入的查询关键字同时去匹配多个字段,并且希望对匹配字段的权重做不同的设置,比如同时去匹配公司名称和公司简介,这里一般需要提升公司名称匹配的权重,这样得出的相关性评分才会更准确。
在ES中,我们可以通过boost参数来控制多字段查询的权重。boost是一个用来修改文档的相关性的参数,默认值是1。可以通过设置不同的值,提升该字段在相关性评分的权重。
GET /personal_report_chapter_es/_search "_source": "includes": ["title","chapterTextContent","chapterId"], "query": "bool": "should": [ "match": "title": "query": "8月经济继续向好", "boost": 10 , "match": "chapterTextContent": "query": "8月经济继续向好", "boost": 5 ] , "sort": [ "_score": "order": "desc" ], "from": 0, "size": 50
注意:这个的chapterTextContent和title字段都要设置权重,否则会不准确,设置一个高一个低即可
以上是关于elasticsearch之解除索引只读问题filtersort解除索引最大查询数的限制reindex迁移数据boost条件权重控制的主要内容,如果未能解决你的问题,请参考以下文章