现有文档如下:
1.苹果手机充电线一条
2.苹果手机ipnonex充电线
3.苹果手机iphonex
4.进口苹果
4.安卓充电线
5.苹果苹果苹果
6.苹果手机手机壳
搜索 苹果手机充电线 ,es分词结果为["苹果", "手机", "充电线"],各个匹配情况为
1.苹果手机充电线一条 ["苹果", "手机", "充电线"] 3个
2.苹果手机ipnonex充电线 ["苹果", "手机", "充电线"] 3个
3.苹果手机iphonex ["苹果", "手机"] 2个
4.进口苹果 ["苹果", "手机"] 1个
5.安卓充电线 ["充电线"] 1个
6.苹果苹果苹果 ["苹果"]1 个
7.苹果手机手机壳 ["苹果", "手机"]2 个
会搜出数据库中这些数据,但我只需要匹配分词数量最多的1号文档和2号文档(匹配到3个词条),而不需要其他文档,因为他们的匹配数都只有1个或2个。
假设没有1号,2号文档,同样搜索 苹果手机充电线 ,返回的也只需要返回3号,7号文档,因为它匹配的个数为2个最多。其他文档匹配数为1不显示。
另外,6号文档中多次出现苹果也能算是一个分词,而7号文档多次出现手机也只能算一个 手机 分词。
1.苹果手机充电线一条
2.苹果手机ipnonex充电线
3.苹果手机iphonex
4.进口苹果
4.安卓充电线
5.苹果苹果苹果
6.苹果手机手机壳
搜索 苹果手机充电线 ,es分词结果为["苹果", "手机", "充电线"],各个匹配情况为
1.苹果手机充电线一条 ["苹果", "手机", "充电线"] 3个
2.苹果手机ipnonex充电线 ["苹果", "手机", "充电线"] 3个
3.苹果手机iphonex ["苹果", "手机"] 2个
4.进口苹果 ["苹果", "手机"] 1个
5.安卓充电线 ["充电线"] 1个
6.苹果苹果苹果 ["苹果"]1 个
7.苹果手机手机壳 ["苹果", "手机"]2 个
会搜出数据库中这些数据,但我只需要匹配分词数量最多的1号文档和2号文档(匹配到3个词条),而不需要其他文档,因为他们的匹配数都只有1个或2个。
假设没有1号,2号文档,同样搜索 苹果手机充电线 ,返回的也只需要返回3号,7号文档,因为它匹配的个数为2个最多。其他文档匹配数为1不显示。
另外,6号文档中多次出现苹果也能算是一个分词,而7号文档多次出现手机也只能算一个 手机 分词。
2 个回复
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
murphy
赞同来自:
在这个例子里,
如果设置为3,会返回至少有匹配三个分词的文档,返回文档1。但如果文档1不存在,文档2不会返回的。 --- 不符合要求
如果设置为2,会返回至少有匹配两个分词的文档,返回文档1和2。期望是文档1存在,文档2并不返回。 --- 不符合要求
也许,可以试一下Elasticsearch的_msearch。
查询两次(第一个设置为3,第二个设置为2),如果第一个查询有结果,丢掉第二个查询的结果。
这个办法并不好,希望有更好的解决方案。