首页 > 其他分享 >es: match_phrase短语匹配

es: match_phrase短语匹配

时间:2024-10-09 19:01:02浏览次数:8  
标签:短语 fox 搜索 match quick phrase es

一,问题的表现

当我们在es的索引库中搜索 朝阳新城 时,搜索结果中有包含 朝阳新城 这四个字的结果,也有只包含朝阳或只包含新城的结果,
这是analyzer在对关键词做了分词之后从索引库中返回,
如果说:我只想要包含朝阳新城这四个字的结果,需要怎么做?

二,解决:

1,默认的match搜索会对搜索内容进行分词,比如:mill lane 会分成 mill 和 lane 之后搜索的结果可能包含仅有其中一项的结果,但是此类结果分数较低。
如果不希望被分词而是直接查询短语,可以使用 match_phrase 进行搜索

就像 match 查询对于标准全文检索是一种最常用的查询一样,
当你想找到彼此邻近搜索词的查询方法时,就会想到 match_phrase 查询

例子:

GET /my_index/my_type/_search
{
    "query": {
        "match_phrase": {
            "title": "quick brown fox"
        }
    }
}

match_phrase 查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,
但只保留那些包含 全部 搜索词项,且 位置 与搜索词项相同的文档。
比如对于 quick fox 的短语搜索可能不会匹配到任何文档,因为没有文档包含的 quick 词之后紧跟着 fox 

2,什么是短语匹配?

一个被认定为和短语 quick brown fox 匹配的文档,必须满足以下这些要求:

  • quick 、 brown 和 fox 需要全部出现在域中。
  • brown 的位置应该比 quick 的位置大 1 。
  • fox 的位置应该比 quick 的位置大 2 。

如果以上任何一个选项不成立,则该文档不能认定为匹配。

三,php中应用match_phrase

注意此处指定analyzer,因为是要与创建索引时使用的分词器保持一致,
避免导致结果不准确
info是要搜索的字段名
$key是用户输入的关键词

                $infoWhere = ['match_phrase' => ['info' => ['query'=>$key,'analyzer' => 'ik_max_word']]];
                $mustWhere[] = $infoWhere;

 

标签:短语,fox,搜索,match,quick,phrase,es
From: https://www.cnblogs.com/architectforest/p/18454920

相关文章

  • nodeJS构建错误——digital envelope routines::unsupported
    最近正在调研开源工作流项目,从github上克隆的代码,执行npmrundev报错。错误如下:查找原因出现了问题,自然要想办法解决。在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs 升级到17+版本以后,开始支持 OpenSSL3.0,而 OpenSSL3.0 对各种摘要算法做......
  • Postgresql14数据库一键物理备份与恢复脚本
    热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多提宝贵地意见,我们一起提升,守住自己的饭碗。一、备份脚本#!/bin/bash# 定义一些变量B......
  • WPF Binding中的RelativeSource属性
    一、简介一个在Binding中比较重要的知识点——RelativeSource.使用RelativeSource对象指向源对象。用这个可以在当前元素的基础上查找其他对象用于绑定到源对象。在实际使用Binding的过程中大部分时间Binding都放在了数据模板和控件模板中,(数据模板是控件模板用于定义控件的UI)。......
  • PostgreSQL 使用pg_dump备份和恢复数据库
    PostgreSQL使用pg_dump备份和恢复数据库pg_dump是PostgreSQL提供的用于备份数据库的工具,它可以将数据库内容导出为不同格式的文件,以便之后进行还原或迁移。下面是关于pg_dump和pg_restore的详细使用说明。一、pg_dump基本语法pg_dump[选项]-d<数据库名>-f<备......
  • MES(Manufacturing Execution System,制造执行系统)核心模块
    MES(ManufacturingExecutionSystem,制造执行系统)是现代制造业中不可或缺的一部分,它位于企业的计划层(如ERP)和车间的控制层(如SCADA)之间,起到承上启下的作用。MES系统通常包括多个功能模块,以支持从订单下达到产品完成的整个生产过程的管理和优化。以下是MES系统的一些核心模块:......
  • easyocr 及其 与tesseract的比较
    EasyOCR介绍EasyOCR是一个基于深度学习的开源光学字符识别(OCR)工具,由JaidedAI开发,能够从图片中提取文字信息。与传统OCR工具不同,EasyOCR使用神经网络进行训练和识别,支持80多种语言,并且可以处理复杂的文本布局、手写体和多语言场景等问题。它非常适合从自然场景图像(如路......
  • java中Set的介绍与实现:HashSet、LinkedHashSet、TreeSet
    在Java中,Set是Collection接口的一个子接口,它是一个不包含重复元素的集合,且通常不保证维护元素的有序或迭代顺序。Set接口主要用于确保集合中每个元素的唯一性。Set接口的主要方法:booleanadd(Ee):将指定的元素添加到此集合中(如果它尚未在集合中)。booleanremove(Objec......
  • 在线加密解密工具(MD5,aes,des,sha,ripemd160,hmac,rabbit,rc4)
    MD5加密AES加密/解密DES加密/解密SHA加密RIPEMD160哈希加密HMAC哈希加密Rabbit加密/解密RC4加密/解密......
  • 基于session的认证权限中间件
    fromdjango.utils.deprecationimportMiddlewareMixinfromdjango.confimportsettingsfromdjango.shortcutsimportredirect,HttpResponse,renderfromdjango.httpimportJsonResponseclassContext:def__init__(self,role,id,name):self.ro......
  • 【test】2024.10.8
    次大值思路发现性质,对于一个数\[a[i]\%a[j]\lea[i]\]当他取得最大值时\(a[i]<a[j]\)于是对于前&n-1&大的数,他的贡献值就是他本身,所以我们只需要保存第\(n-1\),\(n-2\)大的数就可以。但是此时要注意第\(n\)大的数的贡献值没有计算,由于\(a[n]\%a[n-2]<a[n-2]\),所以如果他要......