ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

elastic.js第一课:用MatchQuery轻松实现全文检索

elastic.js第一课:用MatchQuery轻松实现全文检索 elastic.js第一课用MatchQuery轻松实现全文检索【免费下载链接】elastic.jsA JavaScript implementation of the elasticsearch Query DSL项目地址: https://gitcode.com/gh_mirrors/el/elastic.jselastic.js 是一个用 JavaScript 实现的 Elasticsearch 查询 DSL 库它能让你告别手拼 JSON用优雅的链式方法构建全文检索请求。本教程从零开始带你掌握 elastic.js 中最常用的 MatchQuery 查询一步步实现输入关键词、返回匹配文档的搜索体验非常适合刚接触 Elasticsearch 的 JavaScript 开发者。 什么是 elastic.js给前端同学的 Elasticsearch 查询 DSLelastic.js 的核心思想很简单把 Elasticsearch 复杂的查询 DSL 封装成一个个 JavaScript 对象所有 API 都挂在全局ejs命名空间下见 src/pre.js。你不再需要记忆{query: {match: {...}}}这种嵌套 JSON 结构只需要这样写var query ejs.MatchQuery(title, elasticsearch);是不是非常直观所有方法都支持链式调用最后通过.toJSON()输出标准查询体直接交给官方 elasticsearch JavaScript 客户端使用。 MatchQuery 是什么全文检索 vs 精确匹配在动手之前先搞清两个容易混淆的概念TermQuery精确匹配把输入当作一个整体词条不做分词适合查询 ID、状态码等精确值。MatchQuery全文检索会对输入文本做分词analyze再按分词结果去匹配文档同时会计算相关性评分score是全文检索场景的主力军。例如搜索elasticsearch 教程MatchQuery 会拆成elasticsearch和教程两个词去匹配只要文档中包含其中任意一个词就可能命中并按相关度排序。这正是搜索引擎的工作方式。 安装与准备5 分钟跑通第一个检索首先获取项目源码git clone https://gitcode.com/gh_mirrors/el/elastic.js然后安装依赖并构建构建配置见 Gruntfile.jsnpm install grunt构建后生成dist/elastic.js和压缩版dist/elastic.min.js在浏览器或 Node 环境中引入即可。elastic.js 依赖官方elasticsearch客户端来真正发起请求两者配合使用。✍️ 第一个 MatchQuery 示例实现标题包含关键词的全文检索我们先看 MatchQuery 最基础的形式。它的构造函数接收两个参数字段名和查询文本源码见 src/query/MatchQuery.jsvar matchQuery ejs.MatchQuery(title, elasticsearch 入门);调用.toJSON()你会得到标准的 ES 查询体{ match: { title: { query: elasticsearch 入门 } } }把它和ejs.Request()组合起来配合官方客户端完成一次真实检索用法参考项目 README.md 的 Search 示例client.search({ index: myindex, body: ejs.Request() .query(ejs.MatchQuery(title, elasticsearch 入门)) }, function (error, response) { console.log(response.hits.hits); // 命中结果 });到这里你已经完成了一次完整的全文检索⚙️ 4 个最常用的配置参数让全文检索更精准MatchQuery 提供了十多个可链式调用的配置方法初学者掌握下面 4 个就能应对绝大多数场景1. operator控制词之间的逻辑关系默认是or任意词命中即可改为and则要求所有分词都命中ejs.MatchQuery(title, elasticsearch 入门).operator(and);2. minimumShouldMatch设置最少命中词数比如要求至少 2 个词命中ejs.MatchQuery(title, elasticsearch 入门教程).minimumShouldMatch(2);3. boost提升匹配文档的权重想让标题字段的匹配结果排得更靠前可以加大 boostejs.MatchQuery(title, elasticsearch).boost(2.0);4. analyzer指定分词器对中文场景尤其重要可以指定 IK 等中文分词器ejs.MatchQuery(content, 全文检索).analyzer(ik_max_word);以上方法都返回this可以随意串联比如.operator(and).boost(1.5)。 进阶用法phrase 短语检索与 slop 容错普通 MatchQuery 只关心词是否出现不关心词的顺序。如果想搜索精确短语如人工智能 发展可以用type(phrase)ejs.MatchQuery(content, 人工智能 发展).type(phrase);有时我们希望短语中的词可以间隔几个词用slop控制容错距离ejs.MatchQuery(content, 人工智能 发展).type(phrase).slop(2);slop(0)表示严格顺序相邻slop(2)允许中间插入最多 2 个其他词。type 还支持boolean和phrase_prefix短语前缀匹配详见 src/query/MatchQuery.js。 组合拳MatchQuery Request 搭建完整搜索页真实项目里搜索请求往往还包含分页、排序、高亮。这些都可以交给ejs.Request完成源码见 src/search/Request.jsvar body ejs.Request() .query(ejs.MatchQuery(title, elasticsearch).operator(and)) .from(0) // 从第 0 条开始 .size(10) // 每页 10 条 .sort(date, desc) // 按日期倒序 .highlight(ejs.Highlight(title)); // 高亮命中词 client.search({ index: myindex, body: body }, function (err, res) { console.log(res.hits.total, res.hits.hits); });Request还支持fields、source、facet、aggregation、suggest等方法可以逐步探索。 从哪里看源码与测试MatchQuery 完整实现src/query/MatchQuery.js每个方法的注释都写明了参数和取值规则。通用查询能力.boost()、.toJSON()等来自 src/mixins/QueryMixin.js。单元测试tests/query_test.js 中用 39 个断言覆盖了 MatchQuery 的全部配置项是最好的使用方法说明书例如它演示了.type(junk)这类非法值会被静默忽略。想继续进阶可以按相同思路学习 src/query/BoolQuery.js组合多个查询和 src/query/QueryStringQuery.js类 Lucene 语法。✅ 小结这一课我们完成了 elastic.js 的入门闭环认识了 ejs 命名空间 → 学会了用 MatchQuery 实现全文检索 → 掌握了 operator、boost、phrase 等关键参数 → 并用 Request 组装了完整搜索请求。建议你打开源码对照 tests/query_test.js 亲手跑一遍把每个方法都试一次全文检索的大门就此打开下节预告如何用 BoolQuery 把多个 MatchQuery 组合成复杂的多条件检索敬请期待【免费下载链接】elastic.jsA JavaScript implementation of the elasticsearch Query DSL项目地址: https://gitcode.com/gh_mirrors/el/elastic.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表