关于java:分布式搜索引擎ElasticSearch之高级运用四

4次阅读

共计 1671 个字符,预计需要花费 5 分钟才能阅读完成。

一、如何优化多字段查问

1. 晋升字段查问得分:

将 title 字段查问比重晋升 10 倍:

GET /movies/_search
{
  "explain": true, 
  "query":{
    "multi_match":{
      "query": "good hearts sea",
      "fields": ["title^10", "overview"]
    }
  }
}

得分系数晋升了 10 倍:

2. 综合晋升字段查问得分:

应用 tie_breaker 将其余 query 的分数也思考进去

GET /movies/_search
{
  "query":{
    "multi_match":{
      "query": "good hearts sea",
      "fields": ["title", "overview"],
      "tie_breaker": 0.3
    }
  }
}

应用 tie_breaker 和不应用查问进去的某一条数据的 _score 分数,会有相应的进步,例如:

title 中蕴含关键词 matched query 的得分,假如是 1.6

overview 中蕴含关键词 matched query 的得分,假如是 1.8

增加了 tie_breaker = 0.3,那么就是这样的了,1.6 * 0.3 + 1.8 = 2.28;

大于最高一条的得分 1.8,这样搜寻的关联性就晋升下来了,更为正当。

二、多条件查问与过滤

1. 多条件查问:

GET /movie/_search
{
  "query":{
    "bool":{
      "filter":[{"term":{"title":"heart"}},
        {"term":{"cast.name":"joseph"}},
        {"range": { "release_date": { "lte": "2016/01/01"}}},
        {"range": { "popularity": { "gte": "25"}}}
        ]
    }
  }
}

2. 减少排序解决:

GET /movie/_search
{
  "query":{
    "bool":{
      "filter":[{"term":{"title":"heart"}},
        {"range": { "release_date": { "lte": "2017/01/01"}}},
        {"range": { "popularity": { "gte": "10"}}}
        ]
    }
  },
  "sort":[{"release_date":{"order":"desc"}}
  ]
}

依据 release_date 进行倒序排列。

三、查全率与查准率

1. 什么是查全率:

索引内符合条件的后果有 N 个,查问进去的符合条件的后果有 X 个,则查全率为:X/N

比方:用户的关键词为笔记本(笔记本蕴含写字的笔记本以及电脑笔记本,在索引中,这些记录为 1000 条,即 N),查问进去的后果如果是 100 条,即 X(蕴含写字的笔记本以及电脑笔记本),则查全率为 10%。

2. 什么是查准率:

查问进去的 X 个文档中,有 M 个是正确的,则查准率为:M/X

比方:用户的关键词为笔记本,这些记录为 1000 条,查问进去的后果如果是 100 条,而在这 100 条(X)当中只有 20 条 (M) 为用户冀望的电脑笔记本,则查准率为 20%。

3. 自定义调整评分:

通过 function_score 实现自定义评分:

GET /movies/_search
{
  "explain": true, 
  "query":{
    "function_score": {
      "query": {      
        "multi_match":{
          "query": "good hearts sea",
          "fields": ["title", "overview"]
        }
      },
      "functions": [
        {"field_value_factor": {
          "field": "popularity",
          "modifier": "log2p",
          "factor": 20
        }}
      ]      
    }
  }
}

通过 function_score 将 popularity 评分调整,采纳 log 对数函数,将系数放大 20,通过 explain 查看具体得分。

value 得分为 3.00

再乘以 12.261267,得出最终得分后果为 36.875378。

本文由 mirson 创作分享,感激大家的反对,心愿对大家有所播种!
入群申请,请加 WX 号:woodblock99

正文完
 0