Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有模糊匹配的多字段弹性搜索及多字段合并分数排序_Php_Laravel_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Lumen_Fuzzy Search - Fatal编程技术网 elasticsearch,lumen,fuzzy-search,Php,Laravel,elasticsearch,Lumen,Fuzzy Search" /> elasticsearch,lumen,fuzzy-search,Php,Laravel,elasticsearch,Lumen,Fuzzy Search" />

Php 具有模糊匹配的多字段弹性搜索及多字段合并分数排序

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等),仅当“文本“是匹配的,否则不匹配。我正在进行类似我的查询,这意味着与特定帖子的用户评论匹配的评论将仅显示。”。我的问题是 我自己的评论没有出现在榜首,因此其匹配率为

我正在使用Laravel中的弹性搜索。我的索引有3个字段
文本、情绪、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个数字“文本”=>“