更改ElasticSearch的相关度算法,以BM25为例(非修改源码)

之前几次要调节相关度算法都是直接修改的lucene的源码包, 需要重启es。 随着深度使用es ,集群重启又很麻烦,经过阅读官网文档终于找到了解决方案(建立mapping时,指定相关度)
官网说明https://www.elastic.co/guide/en/elasticsearch/reference/6.5/index-modules-similarity.html#bm25

{
  "settings": {
    "analysis": {
      "analyzer": {
        "comma": {
          "type": "pattern",
          "pattern": ","
        },
        "char": {
          "type": "pattern",
          "pattern": ""
        }
      }
    },
    "index" : {
            "similarity" : {
              "my_similarity" : { //自定义相关度算法名称
                "type" : "BM25",//相关度算法
                "b" : "0.75",
                "k1" : "1"
              }
            }
        },
        "number_of_replicas": 1,
        "number_of_shards": 1
  },
  "mappings": {
    "info": {
      "properties": {
        "message": {
          "type": "text",
          "analyzer": "ik_max_word"
          , "similarity": "my_similarity" //使用自定义的相关度
        }
      }
    }
  }
}

效果展示

{
                      "value": 1.7618352,
                      "description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
                      "details": [
                        {
                          "value": 19,
                          "description": "termFreq=19.0",
                          "details": []
                        },
                        {
                          "value": 1,
                          "description": "parameter k1", //自定义的值
                          "details": []
                        },
                        {
                          "value": 0.75,
                          "description": "parameter b", // 自定义的值
                          "details": []
                        },
                        {
                          "value": 432.66666,
                          "description": "avgFieldLength",
                          "details": []
                        },
                        {
                          "value": 1337.4694,
                          "description": "fieldLength",
                          "details": []
                        }
                      ]
                    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 存储相关码主要涉及到以下几个方面: 1. 索引结构的定义和构建,包括倒排索引、文档存储和字段映射等。 2. 文档的 CRUD 操作,包括新增、修改、删除和查询等。 3. 集群管理和数据分片,包括节点的加入、移除和数据迁移等。 4. 数据的持久化和恢复,包括索引数据和集群状态的存储和恢复等。 具体的码可以在 Elasticsearch 的 GitHub 仓库中找到,包括核心引擎和各种插件的实现。以下是一些重要的文件和目录: - `src/main/java/org/elasticsearch/index/IndexService.java`:索引服务的实现,负责处理文档的 CRUD 操作和索引结构的管理。 - `src/main/java/org/elasticsearch/index/engine/Engine.java`:引擎的接口,定义了索引和搜索的基本操作。 - `src/main/java/org/elasticsearch/index/engine/InternalEngine.java`:引擎的具体实现,包括文档的存储和查询、倒排索引的维护等。 - `src/main/java/org/elasticsearch/cluster/service/ClusterService.java`:集群服务的实现,负责管理节点和数据的分片等。 - `src/main/java/org/elasticsearch/gateway/Gateway.java`:网关的接口,定义了数据持久化和恢复的操作。 - `src/main/java/org/elasticsearch/gateway/local/LocalGateway.java`:本地网关的实现,将索引数据和集群状态存储在本地磁盘上。 此外,Elasticsearch 还有一些插件,如分词器、查询解析器和REST API 等,这些插件的码也可以在仓库中找到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值