有没有精通 es 搜索的,可付费咨询

33 天前
 findlisa
大概需求就是根据输入关键字,查询到数据后 返回相似度 区间在 0-1 区间。1 表示完全匹配,不太匹配的就降相似度
2138 次点击
所在节点    Elasticsearch
22 条回复
skyemin
33 天前
es 本身不是就有相关度 score 吗
soundlife
33 天前
100 块,谢谢
findlisa
33 天前
@soundlife 张小龙 d2VpamcyNzIy
findlisa
33 天前
@skyemin 返回那个_score 是 0 到正无穷 而且也无法判断是不是完全匹配
fkdog
33 天前
给你个思路,用向量搜索。
然后你需要一套算法把文本向量化。
tarasha
33 天前
可以试试 bge-m3 ,可以将文本转换为密集向量和稀疏向量()。
然后密集向量在 es 中存储为 Dense_Vector ,稀疏向量用 Rank_Features 。
最后 KnnQuery + RankFeatureQuery 混合检索,效果很好。
findlisa
33 天前
@fkdog 向量了解过,需要将文本转向量,挺麻烦的
ming159
33 天前
ES 支持的搜索功能非常丰富. 但总的分为 2 类 query 与 filter
query 是类似模糊匹配,也就是会有一个 _score .分值越高,说明匹配度越高.
filter:是严格匹配. 匹配到数据时,得到的 结果只有 yes/no. 所以只要匹配到 一定是符合过滤条件的.
你的需求应该是这样处理:
1. 构造一个查询条件,同时使用 filter 和 query. 对同一个关键词进行查询. 在拿到结果后,再做处理.
2. 分两次查询,先用 filter 查询,如果没有结果再用 query 查询一次.
ming159
33 天前
codegenerator
33 天前
出价多少?
视价格资深架构师可以应战
akinoowari
32 天前
@findlisa 第一次查询 filter 用 term 匹配一下字段.keyword ,然后加上 macth 查询,得到完全匹配的最高得分,第二次查询的时候计算一下就好,如果第一次没有拿到结果,说明没有完全匹配的,用 cosinesimilarity+1/2.x 得到最终相似度,x 的值看着给,反正不会得到 1 的结果就行
strawberryBug
32 天前
给你个关键词 gauss decay function ,可以自定义 score
findlisa
32 天前
@akinoowari 妙,感谢大佬这是个思路👍
findlisa
32 天前
@strawberryBug ok 谢谢我去看看
lemon1997
32 天前
我做过一个简陋的,需要对文本分词,然后匹配命中数量,不过需要去掉一些无意义的词
findlisa
32 天前
@lemon1997 能简单说下思路吗? 用关键字查询然后取分数最大的那一条做 文本相似度对比,然后拿来做分母吗
findlisa
32 天前
@akinoowari 大佬,有点疑惑,第一次查询加上 match 的话应该都是会有数据的,如果第一次没数据,第二次应该也查不到数据
akinoowari
29 天前
@findlisa 是拿不到呀,所以是 2.x ,x>0 ,等于 0 的话就会有 1 的结果
findlisa
29 天前
@akinoowari 那这样我第一次直接用 match 匹配,然后 返回的第一条拿到 highlight 字段后,拿来用 cosinsimilarity 和查询关键字比较,等于 1 就是完全匹配,第二次直接拿 score 做分母,小于 1 就用这个值算出相应的 maxscore= 0.x/_socre
findlisa
29 天前
@codegenerator 可以加我聊详谈 d2VpamcyNzIy

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1033603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX