一、如何优化多字段查问

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