iBizModel 全文检索体系(PSSYSSEARCHSCHEME)模型详解

iBizModel全文检索模型体系详解

全文检索是现代企业信息系统中的核心功能之一,它支持高效、灵活的文本搜索和数据查询。iBizModel作为全面的模型体系,提供了完整的全文检索模型体系,涵盖了从检索体系定义到具体文档、属性和实体映射的全流程。本文将详细介绍iBizModel全文检索模型体系的应用场景、模型管理图例和建模DSL,帮助您深入理解并应用这一强大功能。

一、全文检索模型体系概述

iBizModel全文检索模型体系是一个层次化的模型结构,以PSSYSSEARCHSCHEME(全文检索体系)为根节点,向下延伸出PSSYSSEARCHDOC(全文检索文档)、PSSYSSEARCHFIELD(全文检索属性)、PSSYSSEARCHDE(全文检索实体)和PSSYSSEARCHDEFIELD(全文检索实体属性)等核心模型。这一体系支持多种搜索引擎类型,包括ElasticSearch、Solr和用户自定义引擎,提供了灵活的配置选项和强大的扩展能力。

全文检索体系的核心价值在于将业务数据与搜索能力深度融合,通过标准化的模型定义,实现数据的自动索引、高效检索和智能分析。体系支持文档分片、副本配置、属性数据类型定义、分析器配置等高级功能,能够满足从简单文档搜索到复杂数据分析的各种业务需求。

二、应用场景分析

1. 企业文档管理系统

在企业文档管理场景中,全文检索体系可用于构建智能文档搜索平台。例如,合同文档管理系统可以通过PSSYSSEARCHSCHEME定义合同搜索体系,使用PSSYSSEARCHDOC创建合同文档索引,通过PSSYSSEARCHFIELD定义标题、签署日期、合同金额等搜索属性。用户可以通过关键词快速定位相关合同,支持按日期范围、金额区间等条件进行高级筛选。

具体实现中,合同实体(PSDATAENTITY)通过PSSYSSEARCHDE与检索文档建立映射关系,确保合同数据的实时同步和索引更新。这种架构支持高并发访问,能够处理海量文档数据,同时保证搜索响应速度和结果准确性。

2. 知识库和内容管理系统

对于知识库和内容管理场景,全文检索体系支持文档内容的全文本索引和智能检索。通过PSSYSSEARCHDOC定义知识文档,配置多语言分析器,支持中英文混合内容的准确搜索。文档属性可以包括标题、摘要、正文内容、标签、作者、创建时间等,满足多维度的搜索需求。

在此场景中,PSSYSSEARCHDE的threadrunmode属性可以设置为线程执行模式,确保大量文档的索引更新不会阻塞主业务流程。同时,通过配置适当的shards和replicas参数,实现搜索系统的高可用和水平扩展。

三、模型管理图例

以下是iBizModel全文检索模型体系的层次结构和关系图,使用Mermaid语法表示:
包含 包含 包含 包含 引用 引用 引用 PSSYSSEARCHSCHEME +String codename +String name +String searchenginetype +Integer docshards +Integer docreplicas +String objnamecase +contains→ PSSYSSEARCHDOC +contains→ PSSYSSEARCHDE PSSYSSEARCHDOC +String codename +String name +String logicname +Integer replicas +Integer shards +Integer defaultmode +contains→ PSSYSSEARCHFIELD PSSYSSEARCHFIELD +String codename +String name +String logicname +String fieldtype +Integer indexflag +Integer storeflag +String analyzer +String searchanalyzer +Integer stddatatype PSSYSSEARCHDE +String codename +String name +String psdeid +Integer threadrunmode +contains→ PSSYSSEARCHDEFIELD PSSYSSEARCHDEFIELD +String codename +String name +String psdefid +String pssyssearchfieldid +String defaultvaluetype +String defaultvalue PSDATAENTITY +String codename +String name +String logicname +Integer detype PSDEFIELD +String codename +String name +String logicname +Integer deftype

该图清晰地展示了全文检索模型体系的层次结构:

  • PSSYSSEARCHSCHEME作为根模型,管理整个检索体系
  • PSSYSSEARCHDOC定义具体的检索文档,包含多个PSSYSSEARCHFIELD
  • PSSYSSEARCHDE建立业务实体与检索体系的桥梁,包含PSSYSSEARCHDEFIELD
  • PSSYSSEARCHDEFIELD将实体属性映射到检索属性,实现数据同步

四、建模DSL详解

1. PSSYSSEARCHSCHEME(全文检索体系)

PSSYSSEARCHSCHEME是全文检索体系的根模型,定义检索体系的基本配置和引擎类型。

groovy 复制代码
pssyssearchscheme (
  codename: "EnterpriseSearch",          // 体系代码标识,在模块内唯一
  name: "企业搜索体系",                   // 体系名称
  searchenginetype: "ELASTICSEARCH",     // 搜索引擎类型
  docshards: 5,                         // 默认分片数
  docreplicas: 1,                       // 默认副本数
  objnamecase: "DEFAULT",               // 对象名称转换规则
  psmoduleid: "base"                    // 所属系统模块
){
  // 子模型定义...
}

关键属性说明:

  • searchenginetype:支持ELASTICSEARCH、SOLR、USER三种类型
  • docshardsdocreplicas:控制索引的分布和冗余,影响搜索性能和可靠性
  • objnamecase:数据库对象名称转换,支持DEFAULT、UCASE、LCASE

2. PSSYSSEARCHDOC(全文检索文档)

PSSYSSEARCHDOC定义具体的检索文档,包含文档级别的配置和属性集合。

groovy 复制代码
pssyssearchdoc (
  codename: "ContractDocument",
  name: "CONTRACTDOCUMENT",
  logicname: "合同文档",
  replicas: 2,                          // 文档副本数
  shards: 3,                           // 文档分片数
  defaultmode: 1,                      // 是否默认文档
  pssyssearchschemeid: "base.EnterpriseSearch"
){
  pssyssearchfield (
    name: "TITLEFIELD",
    codename: "TitleField",
    logicname: "标题属性",
    fieldtype: "TEXT",                 // 属性数据类型
    indexflag: 1,                      // 是否索引
    storeflag: 1,                      // 是否存储
    analyzer: "ik_max_word",           // 索引分析器
    searchanalyzer: "ik_smart",        // 搜索分析器
    stddatatype: 25                    // 标准数据类型
  )

  pssyssearchfield (
    name: "SIGNDATEFIELD",
    codename: "SignDateField", 
    logicname: "签署日期属性",
    fieldtype: "DATE",                 // 日期类型
    indexflag: 1,
    storeflag: 0,
    dateformat: "yyyy-MM-dd",          // 日期格式
    stddatatype: 5
  )
}

文档配置重点:

  • replicasshards:可覆盖体系默认配置,实现细粒度控制
  • defaultmode:标记为默认文档,在无指定文档时使用
  • 支持多种fieldtype:TEXT、INTEGER、DATE、FLOAT、BOOLEAN等

3. PSSYSSEARCHFIELD(全文检索属性)

PSSYSSEARCHFIELD定义文档的具体搜索属性,控制索引和搜索行为。

groovy 复制代码
pssyssearchfield (
  name: "CONTENTFIELD",
  codename: "ContentField",
  logicname: "内容属性", 
  fieldtype: "TEXT",
  indexflag: 1,
  storeflag: 1,
  analyzer: "ik_max_word",
  searchanalyzer: "ik_smart",
  fielddataflag: 0,                    // 是否启用属性数据模式
  pkey: 0,                            // 是否主键
  stddatatype: 25,
  pssyssearchdocid: "base.EnterpriseSearch.CONTRACTDOCUMENT"
)

属性类型详解:

  • 文本类型:配置分词器,支持中文智能分词
  • 数值类型:支持精确匹配和范围查询
  • 日期类型:支持日期格式化和时间范围查询
  • 地理位置类型:支持地理空间查询

4. PSSYSSEARCHDE(全文检索实体)

PSSYSSEARCHDE建立业务实体与检索文档的映射关系,实现数据同步。

groovy 复制代码
pssyssearchde (
  codename: "ContractSearchEntity",
  name: "合同搜索实体", 
  psdeid: "base.CONTRACT",             // 引用的业务实体
  threadrunmode: 1,                    // 线程运行模式
  pssyssearchdocid: "base.EnterpriseSearch.CONTRACTDOCUMENT",
  pssyssearchschemeid: "base.EnterpriseSearch"
){
  pssyssearchdefield (
    name: "TITLE",
    codename: "title",
    psdefid: "base.CONTRACT.TITLE",    // 实体属性引用
    pssyssearchfieldid: "base.EnterpriseSearch.CONTRACTDOCUMENT.TITLEFIELD",
    defaultvaluetype: "SESSION",       // 默认值类型
    defaultvalue: "userid"             // 默认值参数
  )
}

实体映射特性:

  • threadrunmode:支持线程执行,避免阻塞主业务
  • psdeid:引用具体的业务实体,建立数据关联
  • 支持实时数据同步和批量索引更新

5. PSSYSSEARCHDEFIELD(全文检索实体属性)

PSSYSSEARCHDEFIELD定义实体属性与检索属性的映射规则。

groovy 复制代码
pssyssearchdefield (
  name: "SIGNDATE",
  codename: "signdate",
  psdefid: "base.CONTRACT.SIGNDATE",
  pssyssearchfieldid: "base.EnterpriseSearch.CONTRACTDOCUMENT.SIGNDATEFIELD",
  pssyssearchdeid: "base.EnterpriseSearch.ContractSearchEntity",
  defaultvaluetype: "CURTIME"          // 当前时间作为默认值
)

映射配置要点:

  • defaultvaluetype:支持多种默认值类型,包括SESSION、APPLICATION、UNIQUEID等
  • 支持属性值转换和格式化
  • 可配置多个属性映射到同一检索属性

五、完整DSL示例

以下是一个完整的企业合同搜索体系DSL示例:

groovy 复制代码
pssyssearchscheme (
  codename: "ContractSearchScheme",
  name: "合同搜索体系",
  searchenginetype: "ELASTICSEARCH",
  docshards: 5,
  docreplicas: 1,
  objnamecase: "DEFAULT",
  psmoduleid: "base"
){
  pssyssearchdoc (
    name: "CONTRACTDOCUMENT",
    codename: "ContractDocument",
    logicname: "合同文档",
    replicas: 2,
    shards: 3,
    defaultmode: 1
  ){
    pssyssearchfield (
      name: "TITLEFIELD",
      codename: "TitleField",
      logicname: "标题属性",
      fieldtype: "TEXT",
      indexflag: 1,
      storeflag: 1,
      analyzer: "ik_max_word",
      searchanalyzer: "ik_smart",
      stddatatype: 25
    )
  
    pssyssearchfield (
      name: "CONTENTFIELD",
      codename: "ContentField",
      logicname: "内容属性",
      fieldtype: "TEXT",
      indexflag: 1,
      storeflag: 1,
      analyzer: "ik_max_word",
      searchanalyzer: "ik_smart",
      stddatatype: 25
    )
  
    pssyssearchfield (
      name: "SIGNDATEFIELD",
      codename: "SignDateField",
      logicname: "签署日期属性",
      fieldtype: "DATE",
      indexflag: 1,
      storeflag: 0,
      dateformat: "yyyy-MM-dd",
      stddatatype: 5
    )
  
    pssyssearchfield (
      name: "AMOUNTFIELD",
      codename: "AmountField",
      logicname: "金额属性",
      fieldtype: "DOUBLE",
      indexflag: 1,
      storeflag: 1,
      stddatatype: 6
    )
  }

  pssyssearchde (
    codename: "ContractSearchEntity",
    name: "合同搜索实体",
    psdeid: "base.CONTRACT",
    threadrunmode: 1
  ){
    pssyssearchdefield (
      name: "TITLE",
      codename: "title",
      psdefid: "base.CONTRACT.TITLE",
      pssyssearchfieldid: "base.ContractSearchScheme.CONTRACTDOCUMENT.TITLEFIELD",
      defaultvaluetype: "SESSION",
      defaultvalue: "userid"
    )
  
    pssyssearchdefield (
      name: "CONTENT",
      codename: "content", 
      psdefid: "base.CONTRACT.CONTENT",
      pssyssearchfieldid: "base.ContractSearchScheme.CONTRACTDOCUMENT.CONTENTFIELD"
    )
  
    pssyssearchdefield (
      name: "SIGNDATE",
      codename: "signdate",
      psdefid: "base.CONTRACT.SIGNDATE",
      pssyssearchfieldid: "base.ContractSearchScheme.CONTRACTDOCUMENT.SIGNDATEFIELD",
      defaultvaluetype: "CURTIME"
    )
  
    pssyssearchdefield (
      name: "AMOUNT",
      codename: "amount",
      psdefid: "base.CONTRACT.AMOUNT",
      pssyssearchfieldid: "base.ContractSearchScheme.CONTRACTDOCUMENT.AMOUNTFIELD"
    )
  }
}

六、总结

iBizModel全文检索模型体系提供了一个完整、灵活且强大的搜索解决方案,通过层次化的模型设计和丰富的配置选项,能够满足各种复杂的业务搜索需求。从体系定义到具体属性映射,每个环节都经过精心设计,确保搜索功能的高效性、可靠性和可扩展性。

该体系的核心优势在于:

  1. 标准化建模:通过统一的模型规范,降低系统复杂度
  2. 灵活配置:支持多种搜索引擎和丰富的配置选项
  3. 性能优异:通过分片、副本等机制保障大规模数据下的搜索性能
  4. 易于扩展:模块化设计支持功能扩展和定制化开发
  5. 生态集成:与iBizModel其他模型体系无缝集成,形成完整的解决方案

在实际应用中,建议根据具体业务需求合理设计检索体系结构,优化配置参数,并建立完善的监控和维护机制,确保搜索系统的稳定运行和持续优化。通过充分利用iBizModel全文检索模型体系的能力,企业可以构建出高效、智能的搜索平台,显著提升业务处理效率和用户体验。

相关推荐
Elastic 中国社区官方博客1 天前
Elasticsearch:使用推理端点及语义搜索演示
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Elastic 中国社区官方博客2 天前
在 Elasticsearch 中改进 Agentic AI 工具的实验
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
iBizModel4 天前
iBizModel 工具栏(PSDETOOLBAR)与应用菜单(PSAPPMENU)模型详解
ibizmodeling
iBizModel6 天前
iBizModel 树视图(PSDETREEVIEW)模型体系详解
ibizmodeling
Elastic 中国社区官方博客6 天前
AutoOps:简单的 Elasticsearch 集群监控与管理现已支持本地部署
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索
Elastic 中国社区官方博客6 天前
AutoOps:简化自管理 Elasticsearch 的旅程
大数据·人工智能·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客7 天前
Elasticsearch MCP 服务器:与你的 Index 聊天
大数据·服务器·人工智能·elasticsearch·搜索引擎·ai·全文检索
iBizModel7 天前
iBizModel 应用程序(PSSYSAPP)模型体系详解
ibizmodeling
Elastic 中国社区官方博客8 天前
CI/CD 流水线与 agentic AI:如何创建自我纠正的 monorepos
大数据·运维·数据库·人工智能·搜索引擎·ci/cd·全文检索