Project Icon

itemsjs

高效灵活的JavaScript分面搜索引擎

ItemsJS是一款高效轻量的JavaScript分面搜索引擎,专为处理最多10万条JSON数据而优化。它提供全文搜索、相关性评分、分面过滤和排序等功能,可用于前后端开发。该引擎支持与自定义搜索引擎集成,适用于各类数据分类场景,如公司、产品、文档等。多家知名企业已将其应用于实际项目中。

npm 版本 GitHub package.json 版本 NPM 月下载量 GitHub 许可证

ItemsJS - JavaScript 搜索引擎

极其快速的 JavaScript 分面搜索引擎 - 轻量级、灵活且易于使用。专为在 JSON 数据集(最多 10 万项)上执行快速搜索而创建。

演示

演示

查看更多演示示例

使用场景

Itemsjs 主要用于公司、产品、出版物、文档、工作或植物的数据分类。

来自亚马逊、赫尔墨斯、苹果、微软、詹姆斯库克大学、卡内基梅隆大学等机构的人员已实施了该解决方案。 您可以在这里找到真实实施案例列表。

特性

  • 超快速分面搜索:以极快的速度处理和过滤数据。
  • 简单的全文搜索:直观简单的文本搜索。
  • 相关性评分:根据相关性对搜索结果进行排名。
  • 分面过滤和排序:通过各种分面过滤和排序结果。
  • 分页
  • 同时适用于前端和后端
  • 与自定义全文搜索引擎集成

入门

NPM

npm install itemsjs

使用 CommonJS 语法

const itemsjs = require('itemsjs')(data, configuration);
const items = itemsjs.search();

使用 ES 模块语法

import itemsjs from 'itemsjs';
const searchEngine = itemsjs(data, configuration);
const items = searchEngine.search();

客户端

在浏览器中使用 UMD:
<!-- CDN -->
<!-- unpkg: 使用最新版本 -->
<script src="https://unpkg.com/itemsjs@latest/dist/index.umd.js"></script>
<!-- unpkg: 使用特定版本 -->
<script src="https://unpkg.com/itemsjs@2.1.24/dist/index.umd.js"></script>
<!-- jsdelivr: 使用特定版本 -->
<script src="https://cdn.jsdelivr.net/npm/itemsjs@2.1.24/dist/index.umd.js"></script>
<script>
  itemsjs = itemsjs(data, configuration);
  itemsjs.search()
</script>
在浏览器中使用 ES 模块:
<!-- 作为 ES 模块引入 -->
<script type="module">
  import itemsjs from 'https://unpkg.com/itemsjs@2.1.24/dist/index.module.js';
  // 在此初始化和使用 itemsjs
  const searchEngine = itemsjs(data, configuration);
  searchEngine.search();
</script>

使用示例

npm install itemsjs

# 下载 json 数据
wget https://raw.githubusercontent.com/itemsapi/itemsapi-example-data/master/items/imdb.json -O data.json

接下来,创建一个 search.js 文件,内容如下:

const data = require('./data.json');

const itemsjs = require('itemsjs')(data, {
  sortings: {
    name_asc: {
      field: 'name',
      order: 'asc'
    }
  },
  aggregations: {
    tags: {
      title: '标签',
      size: 10,
      conjunction: false
    },
    actors: {
      title: '演员',
      size: 10
    },
    genres: {
      title: '类型',
      size: 10
    }
  },
  searchableFields: ['name', 'tags']
});

/**
 * 获取过滤后的电影列表
 */
const movies = itemsjs.search({
  per_page: 1,
  sort: 'name_asc',
  // 全文搜索
  // query: 'forrest gump',
  filters: {
    tags: ['1980s']
  }
})
console.log(JSON.stringify(movies, null, 2));

/**
 * 获取热门标签列表
 */
const top_tags = itemsjs.aggregation({
  name: 'tags',
  per_page: 10
})
console.log(JSON.stringify(top_tags, null, 2));

使用 Node.js 运行脚本:

node search.js

集成

如果原生全文搜索不够用,您可以与外部全文搜索集成。

工作原理:

  • 数据中的每个项目都需要有 id 字段。也可以是自定义字段,但需要定义。
  • 配置中的 native_search_enabled 选项应该被禁用。
  • 在您的搜索引擎和 itemsjs 中索引数据一次。
  • 在自定义搜索中进行搜索,并将 ids 数据提供给 itemsjs。
  • 完成!

示例:

API

const itemsjs = ItemsJS(data, [configuration])

data

第一个 data 参数是对象数组。

configuration

负责定义全局配置。完整示例请参见配置

  • aggregations 过滤器配置,如 tagsactorscolors 等。负责生成分面。

    每个过滤器可以有自己的配置。您可以在 search() 响应的 buckets 中访问这些配置。

  • title 人类可读的过滤器名称

  • size 为此过滤器提供的值的数量(默认:10

  • sort 值按count(默认)或key(值名称)排序。这也可以是一个定义排序优先级的键数组

  • order asc | desc。这也可以是一个顺序数组(如果sort也是数组)

  • show_facet_stats true | false(默认)以从整个过滤数据集中检索最小、最大、平均、总评分值

  • conjunction true(默认)表示 AND 查询(结果必须符合所有选定的分面值),false 表示 OR 查询(结果必须符合所选分面值之一)

  • chosen_filters_on_top true(默认)已选择的过滤器将显示在未选择的过滤器之上,false 表示过滤器按照sortorder设定的顺序显示,不考虑是否被选中

  • hide_zero_doc_count true | false(默认)隐藏返回结果为0的过滤器

  • sortings 你可以配置不同的排序方式,如tags_asctags_desc,并带有选项,以后可以使用一个键来使用它。

  • searchableFields 可搜索字段的数组。

  • native_search_enabled 是否启用原生全文搜索(true | false。默认启用)

  • isExactSearch 设置为true如果你总是想显示精确搜索匹配。参见lunr stemmerlunr stopWordFilter

  • removeStopWordFilter 设置为true如果你想移除停用词过滤器。参见https://github.com/itemsapi/itemsjs/issues/46。

itemsjs.search(options)

options

  • per_page 每页项目数量。

  • page 页码 - 用于分页。

  • query 用于全文搜索。

  • sort 用于排序。sortings键之一

  • filters 基于特定聚合过滤项目,例如{tags: ['drama' , 'historical']}

  • filter 负责项目过滤的函数。工作方式类似于js原生过滤函数查看示例

  • filters_query 布尔过滤,例如(tags:novel OR tags:80s) AND category:Western

  • is_all_filtered_items 设置为true如果你想返回整个过滤后的数据集。

itemsjs.aggregation(options)

返回特定聚合的完整过滤器列表

options

  • name 聚合名称
  • per_page 每页过滤器数量
  • page 页码
  • query 用于查询过滤器。这不是全文搜索
  • conjunction true(默认)表示 AND 查询,false 表示 OR 查询

itemsjs.similar(id, options)

返回与给定id的项目相似的项目

options

  • field 用于计算相似度的字段名称(例如 tags, actors, colors)
  • minimum 基准项目与相似项目之间字段的最小交集,以在结果中显示它们
  • per_page 每页过滤器数量
  • page 页码

itemsjs.reindex(data)

用于需要重新索引整个数据的情况

data

对象数组。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号