1
skyemin 219 天前
es 本身不是就有相关度 score 吗
|
2
soundlife 219 天前
100 块,谢谢
|
5
fkdog 219 天前
给你个思路,用向量搜索。
然后你需要一套算法把文本向量化。 |
6
tarasha 219 天前 1
可以试试 bge-m3 ,可以将文本转换为密集向量和稀疏向量()。
然后密集向量在 es 中存储为 Dense_Vector ,稀疏向量用 Rank_Features 。 最后 KnnQuery + RankFeatureQuery 混合检索,效果很好。 |
8
ming159 219 天前
ES 支持的搜索功能非常丰富. 但总的分为 2 类 query 与 filter
query 是类似模糊匹配,也就是会有一个 _score .分值越高,说明匹配度越高. filter:是严格匹配. 匹配到数据时,得到的 结果只有 yes/no. 所以只要匹配到 一定是符合过滤条件的. 你的需求应该是这样处理: 1. 构造一个查询条件,同时使用 filter 和 query. 对同一个关键词进行查询. 在拿到结果后,再做处理. 2. 分两次查询,先用 filter 查询,如果没有结果再用 query 查询一次. |
10
codegenerator 219 天前
出价多少?
视价格资深架构师可以应战 |
11
akinoowari 219 天前
@findlisa 第一次查询 filter 用 term 匹配一下字段.keyword ,然后加上 macth 查询,得到完全匹配的最高得分,第二次查询的时候计算一下就好,如果第一次没有拿到结果,说明没有完全匹配的,用 cosinesimilarity+1/2.x 得到最终相似度,x 的值看着给,反正不会得到 1 的结果就行
|
12
strawberryBug 219 天前 via Android
给你个关键词 gauss decay function ,可以自定义 score
|
13
findlisa OP @akinoowari 妙,感谢大佬这是个思路👍
|
14
findlisa OP @strawberryBug ok 谢谢我去看看
|
15
lemon1997 218 天前
我做过一个简陋的,需要对文本分词,然后匹配命中数量,不过需要去掉一些无意义的词
|
17
findlisa OP @akinoowari 大佬,有点疑惑,第一次查询加上 match 的话应该都是会有数据的,如果第一次没数据,第二次应该也查不到数据
|
18
akinoowari 216 天前
@findlisa 是拿不到呀,所以是 2.x ,x>0 ,等于 0 的话就会有 1 的结果
|
19
findlisa OP @akinoowari 那这样我第一次直接用 match 匹配,然后 返回的第一条拿到 highlight 字段后,拿来用 cosinsimilarity 和查询关键字比较,等于 1 就是完全匹配,第二次直接拿 score 做分母,小于 1 就用这个值算出相应的 maxscore= 0.x/_socre
|
20
findlisa OP @codegenerator 可以加我聊详谈 d2VpamcyNzIy
|
21
codegenerator 215 天前
@findlisa 微信查不到,你这个什么帐号?
|
22
findlisa OP @codegenerator 转下 base64
|
23
teiboku1 175 天前
你可以用语义搜索然后把分数自己归一化一下
|