Php 具有模糊匹配的多字段弹性搜索及多字段合并分数排序
我正在使用Laravel中的弹性搜索。我的索引有3个字段Php 具有模糊匹配的多字段弹性搜索及多字段合并分数排序,php,laravel,elasticsearch,lumen,fuzzy-search,Php,Laravel,elasticsearch,Lumen,Fuzzy Search,我正在使用Laravel中的弹性搜索。我的索引有3个字段文本、情绪、haloha_id。 首先,我想匹配“haloha_id”(将haloha_id视为帖子,将文本视为帖子上的注释),如果匹配,则进行进一步匹配。 假设“haloha_id”已匹配,现在我想匹配“文本”字段中的一个子字符串,然后匹配“mood”(即整数0,1,2等),仅当“文本“是匹配的,否则不匹配。我正在进行类似我的查询,这意味着与特定帖子的用户评论匹配的评论将仅显示。”。我的问题是 我自己的评论没有出现在榜首,因此其匹配率为
文本、情绪、haloha_id
。
首先,我想匹配“haloha_id”
(将haloha_id视为帖子,将文本视为帖子上的注释),如果匹配,则进行进一步匹配。
假设“haloha_id”
已匹配,现在我想匹配“文本”字段中的一个子字符串,然后匹配“mood”(即整数0,1,2等),仅当“文本“是匹配的,否则不匹配。我正在进行类似我的查询,这意味着与特定帖子的用户评论匹配的评论将仅显示。”。我的问题是
- 我自己的评论没有出现在榜首,因此其匹配率为100%
- 如果某人的“情绪”和“评论”与我的100%匹配,那么它就不会出现在顶部 我删除了与“情绪”相关的查询,但分数无效,这意味着分数不包括情绪匹配的分数。
"query"=>[
"bool"=>[
"should"=>[
"match"=>[
"text"=>[
"query"=>$userHaloha->filtered_text,
"fuzziness"=>"AUTO",
]
]
],
"minimum_should_match"=>1,
"must"=>[
"match"=>[
"mood"=>$userHaloha->mood,
],
"match"=>[
"haloha_id"=>$userHaloha->haloha_id
]
]
这是我的问题。
"query"=>[
"bool"=>[
"should"=>[
"match"=>[
"text"=>[
"query"=>$userHaloha->filtered_text,
"fuzziness"=>"AUTO",
]
]
],
"minimum_should_match"=>1,
"must"=>[
"match"=>[
"mood"=>$userHaloha->mood,
],
"match"=>[
"haloha_id"=>$userHaloha->haloha_id
]
]
查询是不言自明的。我已经将“haloha_id”添加到过滤块(不为文档打分)、将“文本”添加到必须块(为文档打分)和将“情绪”添加到应该块(为文档打分) 语气中的问题:3排名高于语气:2(应该子句中的搜索词)是由于切分 从 如果您注意到两个具有相同内容的文档变得不同 分数或者说一个确切的匹配没有排在第一位,那么问题就来了 可能与碎片有关。默认情况下,Elasticsearch使每个 shard负责生成自己的分数。但是自从索引 统计数据是分数的重要因素,这只会起作用 如果碎片有相似的索引统计数据。假设是 由于默认情况下,文档均匀地路由到碎片,因此索引 统计数据应该非常相似,评分将按预期进行。 但是,如果您: 在索引时使用路由、查询多个索引或索引太少 索引中的数据则很有可能所有碎片 在搜索请求中涉及的都没有类似的索引 统计数据和相关性可能不好 如果您有一个小数据集,那么解决此问题的最简单方法 就是将所有内容索引到一个只有一个碎片的索引中 (index.number_of_shard:1),这是默认值。然后索引 所有文件的统计数据都相同,分数也相同 始终如一
谢谢你的回复和努力,但我仍然有一些问题,1-我自己的评论在第二位,应该在第一位2-显示其他注释,即使未显示子字符串或语气matched@AliBhutta问题是什么?问题1:我自己的评论显示在第二个数字上,而不是第一个数字问题2:即使没有情绪或子字符串不匹配,也会显示不相关的评论them@AliBhutta你能提供示例和输入文本吗,在这个例子中,我的文本是“辣椒”,心情是2,我首先得到的是“文本”=>“辣椒舒适”“心情”=>2在secod“文本”=>“辣椒”“心情”=>2(我自己的评论)在第7个数字“文本”=>“