当前位置:   article > 正文

elasticsearch之解除索引只读问题、filter、sort、解除索引最大查询数的限制、reindex迁移数据、boost条件权重控制_es只读模式如何解除

es只读模式如何解除

1、解除索引只读问题

1、查看是否存在只读属性

GET /personal_report_chapter_es/_settings

2、解除只读命令

  1. PUT _settings
  2. {
  3. "index":{
  4. "blocks":{
  5. "read_only_allow_delete":"false"
  6. }
  7. }
  8. }

2、filter命令

        返回的文档必须满足filter子句的条件。但是跟Must不一样的是,不会计算分值, 并且可以使用缓存。

        从上面的描述来看,你应该已经知道,如果只看查询的结果,must和filter是一样的。区别是场景不一样。如果结果需要算分就使用must,否则可以考虑使用filter

  1. GET kibana_sample_data_ecommerce/_search
  2. {
  3. "size": 1000,
  4. "query": {
  5. "bool": {
  6. "must": [
  7. {"term": {
  8. "currency": "EUR"
  9. }}
  10. ],
  11. "filter": {
  12. "range": {
  13. "order_date": {
  14. "gte": "2020-01-25T23:45:36.000+00:00",
  15. "lte": "2020-02-01T23:45:36.000+00:00"
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

简单来讲,如果你的业务场景不需要算分,使用filter可以真的让你的查询效率飞起来

3、sort命令

sort命令用来对查询的数据针对某些字段进行排序

3.1、查询上映在2016到2018年的所有的电影,再根据上映时间的倒序进行排序

  1. GET movies/_search
  2. {
  3. "query": {
  4. "range": {
  5. "year": {
  6. "gte": 2016,
  7. "lte": 2018
  8. }
  9. }
  10. },
  11. "sort": [
  12. {
  13. "year": {
  14. "order": "desc"
  15. }
  16. }
  17. ]
  18. }

3.2、sort支持设置多个字段参与排序

  1. GET /offline_sales/_search
  2. {
  3. "sort" : [
  4. { "sale_date" : {"order" : "asc"}},
  5. "total_price",
  6. { "order_id" : "desc" },
  7. "_score"
  8. ]
  9. }

4、解除索引最大查询数的限制

方案1:在设置索引属性时解除索引最大查询数的限制

  1. put _all/_settings
  2. {
  3. "index.max_result_window":200000
  4. }

_all表示所有索引,针对单个索引的话修改成索引名称即可

方案2::在创建索引的时候加上

  1. "settings":{
  2. "index":{
  3. "max_result_window": 500000
  4. }
  5. }

这样设置完毕之后还不行,如果继续使用原来的API进行查询,查询到的结果最大数量仍然是10000,这时候需要在API中添加这样一行代码:

searchSourceBuilder.trackTotalHits(true);

5、使用reindex命令迁移数据

  1. POST _reindex
  2. {
  3. "source": {
  4. "index": "old_index",
  5. "size":1000 //可选,每次批量提交1000个,可以提高效率,建议每次提交5-15M的数据
  6. },
  7. "dest": {
  8. "index": "en_law"
  9. }
  10. }

将老索引的数据迁移到新索引中

6、 boost条件权重控制

        我们在使用ES进行查询时常常遇到这样的场景:需要根据用户输入的查询关键字同时去匹配多个字段,并且希望对匹配字段的权重做不同的设置,比如同时去匹配公司名称和公司简介,这里一般需要提升公司名称匹配的权重,这样得出的相关性评分才会更准确。
在ES中,我们可以通过boost参数来控制多字段查询的权重。

        boost是一个用来修改文档的相关性的参数,默认值是1。可以通过设置不同的值,提升该字段在相关性评分的权重。

  1. GET /personal_report_chapter_es/_search
  2. {
  3. "_source": {"includes": ["title","chapterTextContent","chapterId"]},
  4. "query": {
  5. "bool": {
  6. "should": [
  7. {
  8. "match": {
  9. "title": {
  10. "query": "8月经济继续向好",
  11. "boost": 10
  12. }
  13. }
  14. },
  15. {
  16. "match": {
  17. "chapterTextContent":{
  18. "query": "8月经济继续向好",
  19. "boost": 5
  20. }
  21. }
  22. }
  23. ]
  24. }
  25. },
  26. "sort": [
  27. {
  28. "_score": {
  29. "order": "desc"
  30. }
  31. }
  32. ],
  33. "from": 0,
  34. "size": 50
  35. }

注意:这个的chapterTextContent和title字段都要设置权重,否则会不准确,设置一个高一个低即可

multi_match+boost一起使用

  1. GET /personal_report_chapter_es/_search
  2. {
  3. "_source": {"includes": ["createTime","title","chapterTextContent","chapterId"]},
  4. "query": {
  5. "multi_match": {
  6. "query": "国务院",
  7. "fields": ["title^10","chapterTextContent"]
  8. }
  9. }
  10. }

title^10 代表搜索提升10倍相关性,也就是说用户搜索的时候其实以这个title为主,desc为辅,title的匹配相关度当然要提高权重比例了。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号