尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Nixiesearch索引创建教程:YAML Schema与字段类型映射完整解析

Nixiesearch索引创建教程:YAML Schema与字段类型映射完整解析 Nixiesearch索引创建教程YAML Schema与字段类型映射完整解析【免费下载链接】nixiesearchHybrid search engine, combining best features of text and semantic search worlds项目地址: https://gitcode.com/gh_mirrors/ni/nixiesearchNixiesearch 是一款开源的混合搜索引擎Hybrid Search Engine将传统文本检索与语义向量搜索的长处合二为一。与 Elasticsearch 等引擎不同Nixiesearch 要求你在写入任何数据之前先用一份YAML Schema 文件声明式地描述索引结构——本文将手把手带你完成Nixiesearch 索引创建从理解 Schema 基本结构、搞懂全部字段类型到为真实业务写出一份可直接运行的字段类型映射配置。 一、为什么 Nixiesearch 索引必须预先定义 Schema在 Nixiesearch 中先写数据、后补结构的动态映射schemaless被认为是一种反模式。原因很直接搜索引擎必须提前知道如何为每个字段构建底层索引结构——磁盘存储方式字段值如何落盘由type决定索引结构是否建倒排索引、向量索引、排序/过滤/分面索引都取决于 Schema 中的开关数据校验开启required后缺失字段的文档会在入库时直接报错。好消息是Schema 只需写在一份 YAML 配置文件的schema段里整个集群的索引定义一目了然。单机模式下索引器Indexer与搜索器Searcher运行在同一进程中读写都通过 REST API 完成⚠️ 注意Nixiesearch 的搜索器不保存状态索引只能静态创建——也就是说新增索引需要修改配置文件并重启。二、YAML Schema 基本结构5 分钟看懂索引定义每个索引是schema段下的一个键核心就是fields字段定义块。以电影索引为例schema: movies: # 索引名称 fields: title: # 字段名 type: text # 字段类型必填 search: true filter: true store: true year: type: int filter: true facet: true sort: true几个关键规则要记住规则说明每个字段必须有type不支持自动推断类型文档中出现但 Schema 未声明的字段会被自动忽略不报错索引名即 API 路径创建后通过/v1/index/movies等端点操作别名机制可用alias给索引起多个名字方便无损升级完整的索引映射规范可以参考官方文档 docs/docs/features/indexing/mapping.md。三、字段类型完全清单Nixiesearch 内置的字段类型覆盖了绝大多数业务场景完整列表见 docs/docs/features/indexing/types/overview.md3.1 文本类型text与text[]这是唯一支持全文检索的类型也是区分度最大的类型schema: movies: fields: title: type: text # 单值一个文档只有一个标题 genres: type: text[] # 多值一个文档可含多个类型标签Nixiesearch 明确区分单值字段与多值字段这是它和 Elasticsearch 的一大差异后者所有字段默认可重复。多值字段在响应中会返回数组单值字段则返回标量。3.2 数值类型int、long、float、double及列表变体数值字段不能做全文检索但可以过滤、排序、分面是构建筛选面板的主力price: type: float filter: true sort: true facet: true user_ratings: type: int[] # 数值列表存储多个评分 filter: true store: true数值列表类型int[]、long[]、float[]、double[]适用于历史价格点多维度尺寸这类一字段多值的场景。3.3 日期、地理与其他类型类型文档值格式典型用法dateISO 8601 日期如2024-01-01按天过滤、范围聚合datetimeISO 8601 带时间如2024-01-01T00:00:01Z内部统一转 UTC 毫秒存储geopoint{lat: 1.0, lon: 2.0}距离过滤、距离排序booltrue/false布尔过滤与分面id任意 JSON 标量即_id自动注入无需手动声明文档中的嵌套对象会被自动展平为点号分隔字段{meta: {asin: A1}}对应 Schema 中的meta.asin这一点在映射嵌套 JSON 时尤其有用。四、字段能力开关一份配置决定字段能干什么每个字段都支持一组能力开关默认值需要特别注意与直觉相反开关默认值作用storetrue保留原始值可在搜索结果中返回filterfalse是否允许该字段参与过滤查询sortfalse是否允许按该字段排序仅限单值字段facetfalse是否允许按该字段做分面聚合仅限单值字段searchfalse文本字段是否建立搜索索引requiredfalse字段缺失是否拒绝入库最佳实践sort/facet/filter都要求在后台维护额外的索引数据结构只为你真正会用到的能力开启开关可以显著减小索引体积、提升写入速度。五、文本字段的三种搜索模式词法、语义与混合这是 Nixiesearch 最有含金量的部分——text字段的search开关支持三种模式甚至可以在同一个字段上叠加5.1 词法检索Lexicaltitle: type: text search: lexical: analyze: english # 指定语言分词器默认 generic建议为词法检索显式指定analyze语言英文、中文等搜索引擎会选用对应的 Lucene 语言分析器召回质量更好。5.2 语义检索Semanticoverview: type: text search: semantic: model: e5-small # 引用 inference 段中定义的嵌入模型语义模式需要先在配置的inference段声明一个嵌入模型支持自托管 ONNX 模型也支持外部 Embedding API。5.3 混合检索Hybrid——Nixiesearch 的招牌title: type: text search: semantic: model: e5-small lexical: analyze: english两者叠加即为混合检索引擎并行执行词法查询与 kNN 向量查询再用**倒数排名融合RRF**合并出最终排序。这也是混合搜索引擎名称的由来。六、实战为商品目录写一份完整 Schema把前面的知识串起来下面是一份可直接使用的电商索引配置inference: embedding: e5-small: model: intfloat/e5-small-v2 schema: products: alias: [shop] # 索引别名方便日后无损切换版本 fields: title: type: text search: lexical: { analyze: english } semantic: { model: e5-small } suggest: true # 参与自动补全 price: type: float filter: true sort: true facet: true required: true user_ratings: type: int[] filter: true store: true active: type: bool filter: true created_date: type: datetime filter: true sort: true对应文档示例{ _id: p-1001, title: Running Shoes, price: 89.99, user_ratings: [5, 4, 5, 3], active: true, created_date: 2024-01-15T10:30:00Z }配置完成后启动服务并PUT文档即可完成索引创建。完整的端到端流程含 Docker 启动命令见官方快速上手文档 docs/docs/quickstart.md数值列表等新特性的更多示例见 docs/docs/tutorial/schema.md。七、进阶技巧通配符与嵌套字段面对字段名不固定的数据源可以用通配符字段动态匹配而不必逐个声明extra_*: type: text search: lexical: { analyze: english }约束很简单每个字段名只允许一个*且不能与已声明的普通字段冲突嵌套场景下支持meta.field_*_str这类一个点 一个星号的组合。搜索请求的fields参数同样支持通配符可一次性取回所有匹配字段。八、索引创建常见问题 FAQQ1字段类型可以事后修改吗A索引结构是静态的建议重建索引并通过alias别名平滑切换用户侧 API 地址无需变动。Q2filter开了但搜索报错怎么办A检查是否只对单值字段开启了sort/facet多值字段不支持这两项以及type是否与文档实际值一致。Q3已有现成的向量不想让 Nixiesearch 本地推理A可以把文档字段写成{text: ..., embedding: [...]}的预嵌入格式或在 Schema 中用dim指定维度跳过服务端推理。Q4如何保证数据完整性A将关键字段设为required: true入库时缺失即拒绝——这比事后清洗数据要高效得多。掌握YAML Schema 结构、字段类型清单与能力开关三件套你就已经完成了 Nixiesearch 索引创建的核心工作。接下来可以深入阅读字段类型的细节文档文本、数值、日期、地理或体验一下混合检索在真实数据上的效果——语义召回带来的惊喜往往超出预期。 【免费下载链接】nixiesearchHybrid search engine, combining best features of text and semantic search worlds项目地址: https://gitcode.com/gh_mirrors/ni/nixiesearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表