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条件权重控制的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何把一个索引变为只读

Elasticsearch之索引模板

硬盘怎样解除只读模式

Elasticsearch笔记九之优化

Elasticsearch之curl创建索引库

Elasticsearch之curl创建索引库和索引时注意事项