使用搜索功能

本文档解释了如何在 M3 Business Engine 中使用不同类型的搜索功能。

M3 BE 中提供了以下搜索类型:

  • 简单搜索
  • 高级搜索
  • 包含保留字的搜索
  • 通过 API 调用使用 M3 IES - Infor Enterprise Search (IES)、应用程序编程接口 (API)
  • 多级关键字搜索
  • 非常高级的搜索查询
  • Lucene 参考

简单搜索

这是最简单的搜索形式,它使用区分大小写的完整单词输入。系统将搜索所有列,并且找到的单词可能来自多个列。

  • 使用搜索框

    在搜索框中,以完整并且大小写正确的形式指定要搜索的单词。例如,搜索“奶酪”会返回任何列中“奶酪”的所有实例。

    将 AND 与多个单词组合使用意味着所有单词都必须存在于一行上的一个或多个列中。例如,搜索“cheese AND juice”会返回任何列中都存在这两个单词的所有行。

    将 OR 与多个单词组合使用意味着其中一个单词必须存在于其中一列中。例如,搜索“奶酪 OR 果汁”会返回其中一列中存在任何一个单词的所有行。

    使用 () 可组合 AND 和 OR 块。例如,“奶酪 OR (果汁 011215)”将返回存在“奶酪”或“奶酪 011215”的所有行。

    您可以在搜索框中使用下列通配符:

    • “*”- 替换多个字符。例如,“chee*”会返回包含“chee”的所有实例,如“cheese”、“cheeses”、“large cheeses”等。
    • “?”- 替换特定位置中的单个字符。例如,“jui?e”会返回“juice”的多个实例。
  • 要将搜索限制为单个列,请右键单击列标题并选择“添加到搜索”。指定搜索词。

  • 字段名

    可以在搜索查询中使用字段名来搜索未显示为列的字段。例如,“chee* STAT:20”会返回包含“chee”且状态为“20”的实例,即使状态未显示在列中。

  • 日期

    可以使用用户主表中为用户定义的日期格式来搜索特定日期。例如,“LMDT:112515”会返回日期列中具有采用该格式的“112515”的所有行。

  • 小数点

    所使用的小数点格式由用户主表上的设置控制。例如,“.”、“,”等

高级搜索

  • 范围

    可以使用括号搜索数据范围,如下所示:

    • [x TO y] 表示值包含在内。例如,“[100 TO 480]”会返回所选列中包含从 100 到 480 的值的所有实例。
    • {x TO y} 表示值不包含在内。例如,“{100 TO 480}”会返回所选列中从 100 到 480 的范围之外的所有实例。

    范围可以使用通配符以及“[”和“}”的组合来查找所有具有负值的交易。

  • 日期

    提供了以下日期宏:

    • YEAR(x)
    • MONTH(x)
    • WEEK(x)
    • DATE(x)

    x”是一个当前年份、月份、星期和日期为“0”的相对数字。

    例如,“INDT:YEAR(-1)”。

    DATE 宏可与范围组合以创建您自己的范围。例如,“LMDT:[DATE(-14) TO DATE (0)]”会返回最近两周内的所有交易。

    使用 NOT 进行搜索时,这必须在另一项查询之前。例如,“No:780 NOT INDT:YEAR(0)”。

    日期宏对保存的搜索非常有用,因为它们可以快速链接到某个对象,例如上个月的订单。可以将它们保存到收藏夹、画布作为菜单选项,或保存到工具箱区域,以便轻松进行访问。

  • 通配符

    “?”- 替换特定位置中的单个字符,并可与其他通配符一起使用。例如,“SUNO:?*”。

    对于数字字段,可以使用 NOT 语句。例如,nb mkll?>e,“NOT STQT:0”。

    “~”- 可以用在字母字符而不是数字字符中,并且是模糊搜索。这意味着这些字符不需要完全匹配查询中的字符。

  • 对搜索结果进行排序

    通过对搜索结果进行排序,您可以对功能主表中的任何字段(描述等包含多个单词的字段除外)进行自由排序。不对相关搜索。打开 (CMS022) 中设置的相关表中的搜索查找结果进行排序。

    在相关表和主表中找到结果的搜索将按照选定的排序方法首先显示主表的匹配项,后跟来自未排序的相关表中的匹配项。

    此排序使用关键字“SortBy:x,a,!y”来完成,其中“!”用于执行降序排序。

    可以在工具箱区域保存排序,这使您可以对列表进行重新排序而不必使用单独的索引。例如,可以使用“CONO:xxx”对当前公司编号的结果进行排序,其中“xxx”替换为当前使用的 M3 BE 公司编号。

  • 搜索多个单词

    在多个列中搜索多个单词可以轻松返回错误结果,因为它会在所有列的所有字段中返回搜索的所有实例。例如,“chees* 10”。

    通过使用关键字“SearchFields:x;y;z”,您可以搜索多个列,但只能在指定的字段中搜索。例如,“SearchFields:ITDS,FUDS chees* 10”。

  • 关键字搜索

    借助关键字搜索可简化复杂查询,使其更易于使用。按照 (CMS022) 中相关搜索设置的要求,它还允许在其他表中搜索,而不需要匹配关键字。

    例如,可以定义一项查询,指定时该查询会在关键字搜索中自动附加预设部分。

    可用的关键字键搜索可使用 Ctrl+F 进行显示。

    注意

    对主表和相关表执行关键字搜索(在 (CMS022) 中定义或通过相关表格。链接 (CMS011) 在相关表中定义)。

使用保留字搜索

M3 IES (Infor Enterprise Search) 保留字在已存储和发布的搜索查询中用于自动从其所属上下文中检索信息。

通过使用保留字,您可以在 M3 H5 中构建和发布常规小组件、收藏夹页面,并且可以在 Infor OS 中构建和发布主页和小组件。

保留字也可以根据列表或屏幕标题中的选定行替换查询中的信息。

保存的搜索也可用于将链接添加到其他程序,搜索查询将在这些程序中传递到下一个程序。

此表显示 M3 IES (Infor Enterprise Search) 保留字:

保留字 有效
SortBy:x,y,!z 对 x、y、z 层次结构中的搜索结果进行排序。字段名称之前的“!”表示执行降序排序。
SearchFields:x;y 将搜索限制为列出的字段 x、y 等提高性能并可以消除错误命中。
Year(x) 年份相对于当前年度的日期范围,x = -1 表示去年。
Month(x) 月份相对于当前月份的日期范围,x = -1 表示上个月。
Week(x) 星期相对于当前星期的日期范围,x = -1 表示上周。
Date(x) 日期相对于当前日期的日期范围,x = -1 表示前一天。
<xxxx> 基于列表和列表标题的查询字符串替换内容。
<USID> 已登录的用户 ID。
<CONO> 已登录的公司编号。
<DIVI> 已登录的分部;与 <CurrentDivision> 相同。
<FACI> 来自用户。打开 (MNS150) 的默认分厂。
<CUNO> 来自 (MNS150) 的客户号。
<LNCD> 来自 (MNS150) 的语言代码。
<CurrentLanguage> M3 BE 中目前使用的语言(在会话期间切换语言的情况下)。
<TIZO> 来自 (MNS150) 的时区。
<WHLO> 来自 (MNS150) 的仓库。
<DEPT> 来自 (MNS150) 的部门。
<MNVR> 来自 (MNS150) 的菜单版本。
<DFMN> 来自 (MNS150) 的菜单名称。

此表显示 M3 IES (Infor Enterprise Search),仅与关键字搜索一起使用:

保留字 有效
<QRY> 搜索字符串中已指定的查询。
MAXJOIN:x 用于更改关键字搜索联合中使用的记录数(IES 本地管理页面中设置的默认值)。
NOOPT 在同一个表中进行多次关键字搜索时使用。例如,“查找具有属性 x、y 但不具有属性 z 的物料”或“仓库 a、b 和 c 中存在的物料”。

使用非索引字

M3 IES 非索引字是未编制索引的单词,并自动从搜索查询中删除。例如,“and”、“or”或“etc”。默认情况下,IES 具有一组基于英语的非索引字,其中还包括“a”、“by”、“is”和“as”。可能在某些情况下这些的单词具有需要包含在搜索中的替代含义。例如,“Factor a”或瑞典语单词“is”指的是英语中的“ice”。

此问题的解决方法是在这些单词的 IED 管理页面中添加一个新的非索引字。这称为唯一内容,否则将不会进行搜索,如“lkdshja7789”。

注意

MITMAS、MITLAD、OCUSMA、CIDMAS 等受影响的表必须在从 IED 管理页面中添加新的非索引字后重新编制索引。

搜索查询和关键字搜索规则

以下规则用于设置“*”和“~”:

  • <QRY>* - 在指定的查询中每个单词的末尾自动附加通配符。例如,查询“joh smit”在执行搜索之前设置为“joh* smit*”。
  • <QRY>~' - 在指定的查询中每个单词的末尾自动附加波形符或模糊搜索。例如,查询“joh smit”在执行搜索之前设置为“joh~ smit~”。由于此类搜索的性质,模糊搜索不应与数字值一起使用。

例外:

  • 查询内部 "" - 指定以双引号 "" 括起来的查询时,通配符不会添加到搜索中,因为搜索引擎会将包含在 "" 中的所有字符都视为正常字符。也就是说,"joh*"只返回“joh*”的结果(包括“*”字符),而不是“john”等。
  • 短字 -(从 M3 IES 版本 11 补丁 5 开始生效)。包含少于 IES 本地管理页面中设置的字符数的短字不会附加“*”或“~”。例如,如果设置是三个字符(默认值),则“jo”、“10”和“xl”不会附加“*”或“~”。这是为了提高系统性能。

通过应用程序编程接口 (API) 调用使用 M3 Infor Enterprise Search (IES)

M3 API 完全支持使用 IES。某些标准 API 交易(例如,“Trans SearchItem”MMS200MI)支持搜索,其中常规筛选器输入将替换为搜索查询。通过 API 执行的搜索支持所有正常的搜索查询,但与用户界面相关的搜索查询(如,日期宏)和字段值替换(如,<WHLO>)除外。

MDBREADMI 和 CMS100MI 完全支持搜索。

注意

在 API 中,搜索可以返回的记录数没有固定的上限,但是存在因超时而导致的实际限制。因此,返回的记录数取决于环境,但合理的最大值约为 3.000-6.000 条记录。

有关更多详细信息,请参阅 MI 存储库。打开 (MRS001)MI 交易。打开 (MRS002)MI 交易布局。打开 (MRS003) 中的 API 存储库。

方面搜索

IES 通过 API 调用的一项功能是方面搜索。这些基本上是在特定字段中与特定值匹配的记录数的计数,或将记录数汇总到各个组中。

通过 (FACETIM) 检索 M3 方面。API 的输入是为其检索方面的表名,其次是通过搜索查询筛选方面及其计数。例如,查询结果可能分组为购买价格为“0”的 161 条记录和采购价格为“20”的 1 条记录。

无论记录数量如何,使用方面的优点是高性能,并且方面的筛选器及其计数基于搜索查询。这在数据中提供了无限可能的下溯。

方面也可以用作在线统计,它们已添加到许多 M3 表中,包括交易和统计表。例如,方面用在 M3 Sales Manager 主页模板中。

多级关键字搜索

多级关键字搜索用于并行搜索多个表。

注意

必须始终启动多级搜索,搜索返回最少的命中数,这也是您使用所指定的查询的命中数,例如 MITMAS 级别。

添加多个关键字搜索可以使用同一查询来搜索不同语言的描述以及别名。请注意,将关键字搜索连接到更高级别,就像只进行一次关键字搜索一样。

深度高级搜索查询

本部分面向希望通过代码运行 IES 搜索查询的高级 IES 用户。这些不是人工创建的。

无需 Ctrl+F UI 的关键字搜索/(CMS030)

关键字搜索。打开 (CMS030) 中定义时使用的语法的相关示例:

related:[ITEM/WHS("WHLO:100"; ITEM GRP1("ITGR:1533"; ITEM_BROWS("chair")))]

  • (CMS030) 中存在的关键字搜索 ID -“ITEM/WHS”、“ITEM GRP1”和“ITEM_BROWS”
  • 按关键字搜索查询 -“WHLO:100”、“ITGR:1533”和“chair”
    注意

    确保使用正确数量的“)”非常重要。

无需 UI 的关键字搜索/(CMS030)

(CMS030) 中未定义时使用的语法的相关示例:related:

[MITMAS(ITNO;"ITGR:fop*"; ITEM_BROWS("chair"))]

  • M3 中的表名 -“MITMAS”
  • 关键字搜索的输出字段(如果搜索多个字段,请使用“,”)-“ITNO”
  • 按关键字搜索查询 -“ITGR:fop”和“chair”
  • (CMS030) 中存在的关键字搜索 ID -“ITEM_BROWS”

(CMS030) 中未定义并且别名不在字段别名。打开 (CMS031) 中时使用的语法的相关示例:

related:[ITEM_RESP("magnus";MITBAL(RESP=USID,CHID;"RESP:itama0";ITEM/WHS("WHLO:100";ITEM GRP2("1533";ITEM_BROWS("chair")))))]

  • M3 中的表名 -“MITBAL”
  • 关键字搜索的输出字段(如果搜索多个字段,请使用“,”)-“USID”、“CHID”
  • (CMS030) 中存在的关键字搜索 ID -“ITEM_RESP”、“ITEM/WHS”和“ITEM_BROWS”
  • 字段别名(通常在 (CMS031) 中定义)-“RESP”

使用关键字搜索的示例

  • related:[ORDEREDGTO_1(MITMAS(ITNO;"ITNO:cherry OR ITDS:cherry~ OR FUDS:cherry~ OR ITDS:cherry* OR FUDS:cherry*"))]
  • related:[MITMAS(ITNO;"ITGR:fop*"; ITEM_BROWS("chair"))]
  • related:[ITEM/WHS("WHLO:100"; ITEM GRP1("ITGR:1533"; ITEM_BROWS("chair")))]
  • related:[MITBAL(ITNO;"RESP:itama0";ITEM/WHS("WHLO:100";ITEM GRP2("1533";ITEM_BROWS("chair"))))]
  • related:[MITMAS(ITNO;"ITGR:fop*"; ITEM_BROWS("chair"))] NOT related:[ITEM/WHS("WHLO:100] 单独的关键字搜索。可以使用 AND(如果未指定任何内容,则将使用默认值)、OR 和 NOT。在此示例中,只要在第二个关键字搜索中未命中,就会列出第一个部分中存在的命中。
  • MAXJOIN:2000 related:[MITMAS(ITNO;"ITGR:fop*"; ITEM_BROWS("chair"))] 请注意,MAXJOIN 会增加关键字搜索内部的命中数。这会覆盖 IES 本地管理页面中的设置。

Lucene 参考

IES 使用 Lucene 搜索引擎作为基础。Lucene 搜索语法记录在 https://lucene.apache.org/core/2_9_4/queryparsersyntax.html 中。