怎么做souq网站,网站导航类型,个人做的网站,关于网站内容建设的正确说法序 2024年4月#xff0c;小组计算建设标签平台#xff0c;使用ES等工具建了一个demo#xff0c;由于领导变动关系#xff0c;项目基本夭折。其实这两年也陆陆续续接触和使用过ES#xff0c;两年前也看过ES的官网#xff0c;当时刚毕业半年多#xff0c;由于历史局限性导… 序 2024年4月小组计算建设标签平台使用ES等工具建了一个demo由于领导变动关系项目基本夭折。其实这两年也陆陆续续接触和使用过ES两年前也看过ES的官网当时刚毕业半年多由于历史局限性导致根本看不懂。因此趁着这个机会在5月6月期间基本看了一遍ES的官方文档先从整体梳理了ES的基础知识共四期。
Elasticsearch 第一期ES的前世今生-CSDN博客
Elasticsearch 第二期基础的基础概念-CSDN博客
Elasticsearch 第三期倒排索引分析映射-CSDN博客
Elasticsearch 第四期:搜索和过滤-CSDN博客 前言
这篇文章的内容是根据ES官方关于搜索的章节整理的。但目录结构做了重新整理。分别从相关性搜索过滤进行了介绍。具体如下 相关性
ES搜索的本质其实是把文档根据搜索内容进行相关性排序。所以在介绍ES搜索之前先简单介绍一下ES相关性。关于相关性的理论知识具体可以参考官网。当然相关性得分只是搜索排序的一种还有特殊场景的排序方法如地理位置邻近算法。
众所周知查询语句会为每个文档生成一个评分 _score 。通常我们说的 相关性 是用来计算全文本字段的值相对于全文本检索词相似程度的算法。
Elasticsearch 的相似度算法被定义为TF/IDF检索词频率/反向文档频率 。 检索词频率检索词在该字段出现的频率。出现频率越高相关性也越高。 字段中出现过 5 次要比只出现过 1 次的相关性高。 反向文档频率每个检索词在全部索引中出现的频率。频率越高计算相关时相关性的权重越低。检索词出现在多数文档中会比出现在少数文档中的权重更低。 字段长度准则该字段的长度是多少。长度越长相关性越低。 检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大。 检索词频率 titledog love person 很明显dog在第二个文档中出现了2次因此文档2相关性更强 titledog love dog 反向文档频率 titledog love person 当使用dog和person来搜索时虽然文档2被命中了2次但person在全部文档中出现了频率比dog少因此计算person相关性权重的时候会更大 titledog love dog 字段长度准则 titledog love person 搜索love时可以名字两个文档但文档2中的字段相对较短其得分更高。 titledog love dog
搜索
搜索的过程就是在全文字段中搜索到最相关的文档。搜索两个最重要的方面是
相关性Relevance它是评价查询与其结果间的相关程度并根据这种相关程度对结果排名的一种能力
分析Analysis它是将搜索关键字和文档内容转换为有区别的、规范化的 词项token 的一个过程。 目的是为了a创建倒排索引 b查询倒排索引。
在Elasticsearch 7.x中它提供了三种主要的文档检索方式全文搜索、词项搜索和复合搜索。
全文搜索
简单查询
全文搜索是Elasticsearch最常见的搜索方式主要用于搜索文本字段。用户只需要提供关键词Elasticsearch就能自动地在索引中找到包含这些关键词的文档。在全文搜索中Elasticsearch使用了一种名为“倒排索引”的数据结构可以非常高效地执行搜索操作。
全文搜索主要通过match查询实现。match查询会对用户给出的关键词进行解析然后进行分词处理。只要查询语句中的任意一个词项在文档中被匹配该文档就会被检索到。
全文搜索经常用的命令包括 match 匹配查询用于单字段搜索 multi_match 在多个字段上反复执行相同查询
match
{query: {match: {title:{query:BROWN DOG!,operatorand //所有词项都要匹配时minimum_should_match:50%}}}
}
上面是match搜索的一个用例。搜索内容可以是一个词项也可以是多个词项。若是多个词项场景这些词语会被解析成单个词然后在倒序索引中进行精确term查找。默认是这些词之间的关系是or即满足文档中包含其中一个词就会被找到。
match有两个参数来控制搜索操作和返回结果。 operator需要搜索的关键词必须全部出现 minimum_should_match 最小匹配参数
有时候需要搜索的关键词必须全部出现可以使用参数 operator 设置为 and 。
若文档数量超多可以对相关性设定阈值而我们只希望返回相关性高的文档 可以使用 minimum_should_match 最小匹配参数。该参数的值设置有两种方式指定必须匹配的词项数用来表示一个文档是否相关。具体数值可以参考
1. 设置为某个具体数字来制定匹配的词项数量
2. 将其设置为一个百分数百分数可以设置为正值75%也可以设置为负值-25%。计算必须文档中要匹配的词项数量 75% -25% 4个搜索关键词 4*75%3 4-4*25%3 4个搜索关键词 5*75%3(向下取整) 5-5*25%4向下取整
multi_match
multi_match 则是match在多字段查到的一个简便方式。可以在能在多个字段上反复执行相同查询。
{query:{multi_match: {query: BROWN DOG,fields:[title,body]}}
短语近似匹配
简单查询中match 或者multi_match查询可以获得包含查询词条的文档。但搜索查询时没有考虑词语之间的关系如位置关系词性关系甚至都不能确定匹配到的内容是否来自同一个字段。
1. Java是一门很好的语言很多工程师都喜欢使用.
2. Java工程师都很优秀.
用 match 搜索 Java 工程师 上面的两个文档都会得到匹配但很明显其实文档2是我们需要的可能性更大。
当使用分析器将文档内容和搜索关键词进行分词之后理解分词之间的关系是一个复杂的难题。我们也无法通过更换查询方式或者底层存储结构来解决分词问题。但我们至少可以通过出现在彼此附近或者相邻的分词来判断分词之间的相关性。
这就是短语匹配或者近似匹配的所属领域。对于短语匹配match_phrase也是经常用的搜索方式之一。例如下面的例子
{query: {match_phrase: {title: {query:quick brown fox,slop:2}}}
}
对于与match和multi_match查询不同的是除了将查询关键字解析成一个词项然后在倒排索引中进行搜索查询外match_phrase还会比较快搜索词项之间的位置最终结果只会保留 位置 与搜索词项相同的文档。
精确短语匹配 或许是过于严格了。也许我们想要包含 “Java 高级 工程师” 的文档也能够匹配 “Java 工程师,” 可以通过使用 slop 参数将灵活度引入短语匹配中。
slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配 。 相隔多远的意思是为了让查询和文档匹配你需要移动词条多少次。
词项搜索
词项搜索与全文搜索不同查询不会对输入进行分词处理而是将输入作为一个整体进行搜索。词项搜索方式本文整理了精确查找--term和部分匹配搜索。
精确查找和范围查找
我们首先来看最为常用的 term 查询和range查询。正如上面所说词项搜索不会对输入进行分词处理而是将输入作为一个整体在倒排索引中查找准确的词项。term和range一般适用于用来处理数字numbers、布尔值Booleans、日期dates等。 term 查询某个字段等于搜索词的文档 term:{ address:香港} 查询地址等于香港的文档 terms 查询某个字段里包含多个关键词的文档 terms:{ address:[香港,北京]} 查询地址等于香港或北京的 range 实现范围查询 range: { age: { from: 18, to: 28, include_lower: true, include_upper: true } }
部分匹配
可以发现以上提出的搜索查询方式都是针对倒排索引整个词的操作。即根据词项在倒排索引中进行匹配查找。也就是说只能查找倒排索引中存在的词最小的单元为单个词。
但如果想匹配倒排索引中存在词项一部分 如搜索Java的时候也希望把JavaScript查出来。这个时候怎么办呢这个便是接下来要解释的内容--部分匹配。 部分匹配 允许用户指定查找词的一部分并找出所有包含这部分片段的结果。默认状态下 部分匹配默认不做相关度评分计算它只是将所有匹配的文档返回。部分匹配有三种方式这三种方式也不会对搜索词进行分词 前缀查询 通配符查询 正则表达式查询 prefix 不会在搜索之前分析查询字符串它假定传入前缀就正是要查找的前缀。 prefix: {postcode: W1} wildcard 使用标准的 shell 通配符查询 ? 匹配任意字符 * 匹配 0 或多个字符 wildcard: { postcode: W?F*HW , postcode: W[0-9]. } regexp 正则式 { regexp: { title: br.* }}
复合搜索
复合搜索是Elasticsearch中最强大的搜索方式之一它允许用户组合多种查询条件实现复杂的搜索需求。在Elasticsearch中复合搜索主要通过bool查询实现。bool查询可以利用逻辑关系如and、or、not组合多个其他的查询从而构建出复杂的查询条件。
除了bool查询Elasticsearch还提供了其他一些复合查询方式如filter查询、join查询等。这些查询方式可以进一步扩展复合搜索的能力满足更复杂的搜索需求。
bool 过滤器一般由以下三部分组成
{bool : {must : [],should : [],must_not : []}
} must 必须 匹配这些条件才能被包含进来。 must_not 必须不 匹配这些条件才能被包含进来。 should 如果满足这些语句中的任意语句将增加 _score 否则无任何影响。它们主要用于修正每个文档的相关性得分。
过滤
过滤和搜索不同过滤不需要谈论相关性或得分。过滤得到的结果 非是即否。它简单的对文档包括或排除处理。fliter可以单独使用也可以结合bool复合搜索来实现功能更强大的操作。
Elasticsearch 会在运行过滤查询时执行多个操作如执行下面语句时Elasticsearch行为包含4步
{ filter:{term:{age: [3,63]},term:{price: 30}}
} 查找匹配文档.
term 查询在倒排索引中查找获取包含该 term 的所有文档。
2. 创建 bitset.
过滤器会创建一个 bitset 一个包含 0 和 1 的数组它描述了哪个文档会包含该 term 。匹配文档的标志位是 1 。如有四个文档执行完term:{age: [3,63]}语句之后会得到一个bitset 的值 [1,0,0,0] 。
3. 迭代 bitset(s)
一旦为每个查询生成了 bitsets Elasticsearch 就会循环迭代 bitsets 从而找到满足所有过滤条件的匹配文档的集合。一般来说先迭代稀疏的 bitset 因为它可以排除掉大量的文档。
4. 增量使用计数.
Elasticsearch 能够缓存过滤查询从而获取更快的访问而且过滤查询也不会计算相关行。因此filter速度要快于query。
总结
本文先介绍了相关性的知识然后从全文搜 索词项搜索复合搜索三方面来介绍了ES搜索的常见场景和操作。最后介绍了与搜索对应的过滤操作。
本文的内容意在梳理ES搜索操作并未细究背后的原理如相关性算法等。后续如果有需要会补充。当然在实际应用中要综合考虑具体场景来选择相应的搜索方式。
参考文档
https://www.cnblogs.com/qdhxhz/p/11493677.html
Elasticsearch 7.x文档检索的三大策略全文搜索、词项搜索与复合搜索-百度开发者中心 文章转载自: http://www.morning.mfmbn.cn.gov.cn.mfmbn.cn http://www.morning.touziyou.cn.gov.cn.touziyou.cn http://www.morning.rcntx.cn.gov.cn.rcntx.cn http://www.morning.rtzd.cn.gov.cn.rtzd.cn http://www.morning.fllfc.cn.gov.cn.fllfc.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn http://www.morning.xpgwz.cn.gov.cn.xpgwz.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.lbywt.cn.gov.cn.lbywt.cn http://www.morning.pzrnf.cn.gov.cn.pzrnf.cn http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.xglgm.cn.gov.cn.xglgm.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.brjq.cn.gov.cn.brjq.cn http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.gtbjc.cn.gov.cn.gtbjc.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.lhhdy.cn.gov.cn.lhhdy.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn http://www.morning.bmtyn.cn.gov.cn.bmtyn.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.syynx.cn.gov.cn.syynx.cn http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.rdlxh.cn.gov.cn.rdlxh.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn http://www.morning.qsyyp.cn.gov.cn.qsyyp.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.lbywt.cn.gov.cn.lbywt.cn http://www.morning.jbblf.cn.gov.cn.jbblf.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.qcbhb.cn.gov.cn.qcbhb.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.qhnmj.cn.gov.cn.qhnmj.cn http://www.morning.jsdntd.com.gov.cn.jsdntd.com http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.thwcg.cn.gov.cn.thwcg.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.zrkp.cn.gov.cn.zrkp.cn http://www.morning.sqgqh.cn.gov.cn.sqgqh.cn http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn http://www.morning.dkzwx.cn.gov.cn.dkzwx.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.jhwqp.cn.gov.cn.jhwqp.cn http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.kqpq.cn.gov.cn.kqpq.cn http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.qkrz.cn.gov.cn.qkrz.cn