跳到主要内容

全局搜索

全局搜索功能提供了一个统一的搜索界面,可以快速查找整个 OmniCRM 数据库中的客户、联系人、服务、库存和站点。

另请参见:客户库存服务管理

访问全局搜索

在 CRM 的任何地方:

点击顶部导航栏中的搜索图标或导航到:

全局搜索页面会出现一个大型搜索框和过滤选项。

工作原理

全局搜索在五种数据类型之间执行跨实体搜索

搜索内容:

  1. 客户 - 客户名称
  2. 联系人 - 名字、姓氏、电子邮件地址、电话号码
  3. 站点 - 站点名称
  4. 库存 - 序列号、ICCID、标识符(itemtext1,itemtext2)
  5. 服务 - 服务名称、服务 UUID

搜索行为:

  • 部分匹配 - 搜索包含您的查询的术语(例如,“Smith”匹配“John Smith”和“Smithson”)
  • 不区分大小写 - “john”匹配“John”、“JOHN”和“john”
  • 多个实体 - 单次搜索返回所有实体类型的结果
  • 分页结果 - 默认每页显示 10 个结果

执行搜索

基本搜索

  1. 在搜索框中输入您的搜索词
  2. 点击**“搜索”**或按 Enter

全局搜索结果{.align-center width="800px"}

示例搜索词:

  • 客户名称:"Acme Corp"
  • 电话号码:"+1234567890""1234567890"
  • 电子邮件:"john@example.com""john"
  • 序列号:"ICCID8944" 或仅 "8944"
  • 服务 UUID:"123e4567-e89b"

包含已关闭账户

默认情况下,搜索仅返回开放客户账户的结果。

要搜索所有账户,包括已关闭的账户:

  1. 勾选**“包含已关闭账户”**复选框
  2. 再次点击**“搜索”**

这将搜索:

  • 状态为 customer_status = "Closed" 的客户
  • 与已关闭客户相关联的联系人、服务、站点和库存

已关闭账户搜索的用例:

  • 查找历史客户记录
  • 定位已停用服务的设备
  • 查找旧电话号码或服务
  • 恢复客户数据以重新激活

理解搜索结果

结果显示格式

结果以可滚动列表的形式显示:

John Smith 客户 ID: 123 类型: customer

John Smith (联系人) 客��� ID: 123 类型: contact

手机 - +44 7700 900123 客户 ID: 123 类型: service

每个结果显示:

  • 名称/标题 - 主要标识符(可点击链接)
  • 客户 ID - 该记录所属的父客户
  • 类型 - 实体类型(客户、联系人、站点、库存、服务)

结果类型解释

客户结果:

点击后打开客户概览页面,显示所有详细信息、服务、联系人等。

联系人结果:

点击后打开客户页面,活动标签为联系人,滚动到特定联系人。

站点结果:

点击后打开客户页面,活动标签为站点。

库存结果:

点击后打开客户页面,活动标签为库存。如果库存未分配(无 customer_id),则链接到主库存列表。

服务结果:

点击后打开客户页面,活动标签为服务,突出显示特定服务。

从结果导航

所有搜索结果都是可点击链接,直接导航到相关页面:

链接模式:

  • /customers/{customer_id} - 客户记录
  • /customers/{customer_id}#4 - 联系人(标签 4)
  • /customers/{customer_id}#2 - 站点(标签 2)
  • /customers/{customer_id}#8 - 库存(标签 8)
  • /customers/{customer_id}#3 - 服务(标签 3)
  • /inventory-items-list - 未分配的库存

哈希(#)片段在客户页面加载时会自动选择正确的标签。

分页

结果按每页 10 项进行分页:

显示结果 11-20,共 47 项

通过以下方式浏览页面:

  • 上一页/下一页 按钮
  • 页码 - 点击特定页面
  • 键盘 - 左/右箭头(如果已实现)

常见搜索场景

场景 1:通过电话查找客户

用户来电,提供电话号码。

结果: • John Smith (联系人) - 客户 ID: 123 • 手机 - 555-0123 (服务) - 客户 ID: 123

点击任一结果以访问客户账户。

场景 2:定位 SIM 卡

技术人员需要找到哪个客户拥有特定的 SIM。

结果: • 8944538000000001234 (库存) - 客户 ID: 456

点击结果查看 SIM 分配、客户详细信息。

场景 3:查找非活跃客户

需要定位一个 6 个月前关闭账户的客户。

☑ 包含已关闭账户

结果: • Acme Corporation (客户) - 客户 ID: 789

场景 4:通过电子邮件搜索

客户发送电子邮件给支持,工作人员需要找到他们的账户。

结果: • John Smith (联系人) - 客户 ID: 123

场景 5:通过 UUID 查找服务

配置日志显示服务 UUID,需要找到哪个客户。

结果: • 手机 - +44 7700 900123 (服务) - 客户 ID: 456

搜索提示

为了获得最佳结果:

  • 使用部分术语 - “Smith” 比 “John Smith” 更适合更广泛的结果
  • 尝试变体 - 如果“John”无效,尝试电话或电子邮件
  • 包含已关闭账户 - 在搜索历史数据时
  • 对设备要具体 - 使用完整的序列号进行库存搜索
  • 搜索服务 UUID - 当其他标识符未知时

按实体搜索的内容:

客户:

  • 仅客户名称(不包括地址、备注或其他字段)

联系人:

  • 名字
  • 姓氏
  • 电子邮件地址
  • 电话号码

站点:

  • 仅站点名称

库存:

  • itemtext1(通常为 ICCID、序列号、MAC 地址)
  • itemtext2(通常为 IMSI、次要标识符)
  • 注意:不搜索 itemtext3-20 或库存备注

服务:

  • 服务名称
  • 服务 UUID

不搜索的内容:

  • 客户地址
  • 客户备注
  • 交易描述
  • 发票详细信息
  • 配置日志
  • 活动日志条目
  • 库存备注(超出 itemtext1/2)

API 参考

全局搜索端点

GET /utilities/search_everything?search=Smith&page=1&per_page=10&search_closed_records=false
Authorization: Bearer <token>

查询参数:

  • search(必需) - 搜索词
  • page(可选) - ���码(默认:1)
  • per_page(可选) - 每页结果(默认:10)
  • search_closed_records(可选) - 包含已关闭账户(默认:false)

响应:

{
"data": [
{
"id": 123,
"name": "John Smith",
"customer_id": 123,
"type": "customer"
},
{
"id": 456,
"name": "John Smith",
"customer_id": 123,
"type": "contact"
},
{
"id": 789,
"name": "Mobile - +44 7700 900123",
"customer_id": 123,
"type": "service"
}
],
"pagination": {
"current_page": 1,
"per_page": 10,
"total_pages": 5,
"total_items": 47
}
}

搜索逻辑(后端):

后端在所有实体表之间执行 SQL UNION:

-- Customers
SELECT customer_id AS id,
customer_name AS name,
customer_id,
'customer' AS type
FROM customer
WHERE customer_name LIKE '%Smith%'
AND customer_status = 'Open'

UNION ALL

-- Contacts
SELECT contact_id AS id,
CONCAT(contact_firstname, ' ', contact_lastname) AS name,
customer_id,
'contact' AS type
FROM customer_contact
WHERE (contact_firstname LIKE '%Smith%' OR
contact_lastname LIKE '%Smith%' OR
contact_email LIKE '%Smith%' OR
contact_phone LIKE '%Smith%')

UNION ALL

-- Sites
SELECT site_id AS id,
site_name AS name,
customer_id,
'site' AS type
FROM customer_site
WHERE site_name LIKE '%Smith%'

UNION ALL

-- Inventory
SELECT inventory_id AS id,
itemtext1 AS name,
customer_id,
'inventory' AS type
FROM inventory
WHERE itemtext1 LIKE '%Smith%' OR
itemtext2 LIKE '%Smith%'

UNION ALL

-- Services
SELECT service_id AS id,
service_name AS name,
customer_id,
'service' AS type
FROM customer_service
WHERE service_name LIKE '%Smith%' OR
service_uuid LIKE '%Smith%'

结果随后被分页并返回。

性能考虑

搜索性能:

  • 搜索使用带通配符的 LIKE 查询(%term%
  • 当前未实现全文索引
  • 大型数据库(>100k 客户)可能会体验到较慢的搜索
  • 为了性能,结果限制为每页 10 个

优化提示:

  • 使用具体的搜索词以减少结果集
  • 使用已关闭账户过滤器以减少搜索范围
  • 考虑在经常搜索的字段上添加数据库索引

故障排除

未找到结果(但记录存在)

  • 原因: 搜索词与存储的数据格式不匹配
  • 示例:
    • 电话存储为 "+44 7700 900123",搜索 "07700900123" 将无法匹���
    • 电子邮件存储为 "&lt;john.smith@example.com&gt;",搜索 "john" 将无法匹配
  • 解决方案: 尝试变体,使用肯定存在的部分匹配

搜索太慢

  • 原因: 大型数据库,跨多个表的复杂查询
  • 解决方案:
    • 使用更具体的搜索词
    • 限制为仅开放账户(取消勾选已关闭账户)
    • 联系管理员关于数据库索引

结果链接到错误的客户

  • 原因: 多个客户/联系人具有相同的名称
  • 解决方案: 使用客户 ID 进行区分,或按唯一标识符(电子邮件、电话)搜索

已关闭账户未出现

  • 原因: 未勾选“包含已关闭账户”复选框
  • 解决方案: 勾选该框并再次搜索

相关文档

  • basics_customers - 客户管理
  • basics_navigation - 一般导航
  • administration_inventory - 库存搜索