搜索精准度
使用es做搜索,比如用户输入柠檬,搜出来的结果,柠檬汽水,柠檬位牙膏等在前面,真正想要的水果那个柠檬在后面。已经在中文分词中加了柠檬,还是不管用
Elasticsearch • YuLiGod 回复了问题 • 36 人关注 • 17 个回复 • 16304 次浏览 • 2023-04-24 11:00
关键字加入分词器后 完整的搜索关键字为啥搜不到?
Elasticsearch • dsl 回复了问题 • 6 人关注 • 6 个回复 • 4057 次浏览 • 2020-11-12 14:53
每个商品会有描述,切成一组关键词,用户输入多个关键词,当商品的所有关键词在用户的关键词,将被检索出来
Elasticsearch • novia 回复了问题 • 2 人关注 • 1 个回复 • 2494 次浏览 • 2017-11-24 16:39
es如何让含有输入关键字的越多的排在前面
Elasticsearch • 匿名用户 回复了问题 • 6 人关注 • 5 个回复 • 5970 次浏览 • 2017-09-20 14:31
kennywu76 回答了问题 • 2017-08-31 17:31 • 17 个回复
使用es做搜索,比如用户输入柠檬,搜出来的结果,柠檬汽水,柠檬位牙膏等在前面,真正想要的水果那个柠檬在后面。已经在中文分词中加了柠檬,还是不管用
默认的打分机制参考tf, idf,和field norms, 根据给的示例数据看,"柠檬“这个词对于3条文档的tf, idf应该一样,影响打分的只有filed norms。 按道理“柠檬”的field length最短,那... 显示全部 »
默认的打分机制参考tf, idf,和field norms, 根据给的示例数据看,"柠檬“这个词对于3条文档的tf, idf应该一样,影响打分的只有filed norms。 按道理“柠檬”的field length最短,那么得分应该最高,排在第一位返回才对。
为了验证这个结果,我实际测试了一下,过程如下:
创建一个空索引,使用ik_max_word分词器并写入3条数据 PUT testindex/
{
"mappings": {
"logs": {
"properties": {
"product": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
PUT testindex/logs/1
{"product":"柠檬"}
PUT testindex/logs/2
{"product":"柠檬汽水"}
PUT testindex/logs/3
{"product":"柠檬味牙膏"}
查询关键词"柠檬" POST testindex/_search
{
"query": {
"match": {
"product": "柠檬"
}
}
}
查询结果:[code]"hits": {
"total": 3,
"max_score": 0.85747814,
"hits":
}
"柠檬"居然真分数最低,非常出乎我的意料。
于是,我在查询里打开"explain":true选项,查看分数是怎么计算的,发现doc frequency, avgfieldlength看着都不对。
百思不得其解的情况下,Google了一下,在这里找到了答案:
https://github.com/elastic/elasticsearch/issues/24429
简而言之,ES的相关性打分计算是每个shard独立做的。一个索引默认5个shard,如果象示例里那样,写入的文档比较少,可能这些文档分布在不同的shard,造成各个shard分别计算各自的得分的时候,并没有将这几条文档放在一起产生统计数据。 各自的打分不具有可比性。
所以,后面我又做了一个测试,删掉这个索引,重新创建一个,将shard设置为1,重新写入同样3条文档后再搜索,"柠檬”是排第一位返回的。
那么怎么看待这个问题? 因为ES是分布式搜索系统,各个shard独立搜索,独立计算该shard上的文档打分,当数据量比较大的情况下, 上面说的差异统计上看基本被抹平了,通常没什么问题。 但如果索引的文档比较少,不同shard之间对同一个搜索关键词的统计数据差异可能就比较大,这种情况下只能使用一个shard来解决了。
使用es做搜索,比如用户输入柠檬,搜出来的结果,柠檬汽水,柠檬位牙膏等在前面,真正想要的水果那个柠檬在后面。已经在中文分词中加了柠檬,还是不管用
回复Elasticsearch • YuLiGod 回复了问题 • 36 人关注 • 17 个回复 • 16304 次浏览 • 2023-04-24 11:00
每个商品会有描述,切成一组关键词,用户输入多个关键词,当商品的所有关键词在用户的关键词,将被检索出来
回复Elasticsearch • novia 回复了问题 • 2 人关注 • 1 个回复 • 2494 次浏览 • 2017-11-24 16:39