此增强功能仅适用于SuiteCRM 7.11 以及更高版本。

Elasticsearch是一种索引引擎,专门用于获得几乎实时的搜索结果,并针对搜索文本字符串进行了优化。它使用Java构建,并作为单独的服务器/进程运行。

Elasticsearch可与SuiteCRM集成,以大幅提高搜索质量和时间。为此,启用搜索的模块将在Elasticsearch服务器上编制索引。当SuiteCRM收到搜索查询时,它会被重定向到Elasticsearch服务器,该服务器将执行优化搜索并将结果返回给CRM。

SuiteCRM目前仅支持 Elasticsearch 5.6

数据库和elasticsearch索引之间的同步主要有三种:逻辑钩子

每次更新记录时,它都会自动重新编制索引。预定任务

调度程序作业将定期运行,以确保数据库和索引同步。手动索引

管理员可以通过管理面板或Robo任务请求完整或部分索引。

如何设置Elasticsearch

SuiteCRM需要Elasticsearch 5.6。

Elasticsearch要求Java 8运行,仅支持 Oracle Java 和 OpenJDK

启动和运行Elasticsearch服务器的最快方法是使用官方Docker镜像,或者使用基于Debian的系统的.deb软件包(如Ubuntu)。

在本指南中,我们假设您尝试在Ubuntu计算机上安装Elasticsearch。请参阅 官方文档 以了解如何以不同方式安装Elasticsearch。

本指南将教您如何通过Docker或.deb软件包安装,以非常少的配置启动和运行开发服务器。请记住,本指南不适用于设置生产Elasticsearch服务器。

确保当前用户属于 docker 小组或您将收到许可问题。

下载图片:

docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.10

从…开始 docker run

启动Elasticsearch。这是测试/开发服务器的理想选择。

docker run -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" -e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:5.6.10

从…开始 docker-compose

创建一个新的 docker-compose.yml 文件或添加您现有的docker-compose的elasticsearch配置。

version: '3'
services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.10
        container_name: elasticsearch
        restart: unless-stopped
        ports:
            - 9200:9200
            - 9300:9300
        environment:
            - discovery.type=single-node
            - xpack.security.enabled=false
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

并从:

docker-compose up

下载并安装公共签名密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

您可能需要安装 apt-transport-https 在继续之前在Debian上打包:

sudo apt-get install apt-transport-https

将存储库定义保存到 /etc/apt/sources.list.d/elastic-5.x.list

echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

更新存储库并安装OpenJDK 11和Elasticsearch:

sudo apt-get update && sudo apt-get install openjdk-11-jre elasticsearch

您可能需要调整OpenJDK版本以匹配您的发行版可用版本。

启动Elasticsearch:

sudo systemctl start elasticsearch.service

或者在较旧的Ubuntus上:

/etc/init.d/elasticsearch start

测试安装

检查服务器是否正在运行:

curl -X GET "localhost:9200/"

你应该收到这样的东西:

{
  "name" : "B5VzMdk",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "KGoWI84GQ8SZipmDaeA7pA",
  "version" : {
    "number" : "5.6.10",
    "build_hash" : "b727a60",
    "build_date" : "2018-06-06T15:48:34.860Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

请注意,当前设置不提供身份验证。请记住在投入生产之前保护您的Elasticsearch服务器,否则您的数据将容易受到攻击!

设置Elasticsearch集成

转到管理面板,向下滚动到“搜索”设置,然后打开Elasticsearch设置页面。从复选框启用Elasticsearch并填写主机,用户和密码字段。如果您启用了匿名访问,只需将用户和密码留空即可。

如果您通过Docker运行SuiteCRM和Elasticsearch,则主机名必须是Elasticsearch容器的名称。

您可以使用“ 测试”连接查看当前配置是否正常工作。

一旦您对设置感到满意,请点击“ 保存”

保存后,按计划完整索引执行完整索引

现在转到搜索设置,然后进行设置 Elasticsearch Engine作为搜索引擎。您可以自定义模块部分中用于索引的模块。

搜索语法

SuiteCRM Elasticsearch引擎使用Elasticsearch的Query String DSL。这允许执行非常高级的搜索查询。

有关完整的理解,请查看官方文档。这里将提供快速概述。

例子

在任何字段中搜索具有“John”和“Doe”的所有记录:

John AND Doe

搜索名为“John”的所有记录(请注意,这不包括“Johnny”):

name.first:John

搜索名称以“John”开头的所有记录:

named:John*

搜索名称中包含“corp”的所有帐户:

named:corp AND _type:Accounts

加盟

默认情况下,关键字由OR子句连接,这意味着搜索 John Doe 将与搜索相同 John OR Doe。当然,包含“John”和“Doe”的结果将显示在顶部。

推进

名称被提升,这意味着如果其中一个关键字在名称中匹配,则记录很可能会显示在顶部。

通配符

默认情况下,整个关键字必须匹配。因此,用’John’搜索将不会与名为’Johnathan’的人匹配。为此,您需要使用通配符。 *可互换使用以替换零个或多个字符。 ?可以用来替换一个字符。

搜索’John’和’Johnathan’:

named:john*

搜索以“Mc”或“Mac”开头的所有姓氏:

name.last:(Mc* OR Mac*)

通配符也可以在关键字的开头使用,但它会使搜索稍慢。

搜索姓氏以’Connor’结尾的所有记录:

name.last:*connor

按模块搜索

您可以使用_type关键字和模块名称将搜索限制为一个或多个模块。

搜索所有用户:

_type:Users

使用~将使关键字模糊,这意味着它将进行邻近搜索,找到具有一个不同字符(距离)的所有匹配。可以通过在波浪号后添加一个数字来定制距离,

搜索’MacKenzie’,’McKenzie’,’Makenzie’等。

MacKenzie~3

元数据

每条记录都有以下可以搜索的元字段:

  • meta.created.date
  • meta.created.user_id
  • meta.created.user_name
  • meta.modified.date
  • meta.modified.user_id
  • meta.modified.user_name
  • meta.assigned.user_id
  • meta.assigned.user_name

搜索’John Doe’创建的所有记录:

meta.created.user_name:(John Doe)

搜索8月1日修改的所有记录。

meta.modified.date:"2018-08-01"

命令行工具

SuiteCRM的Elasticsearch集成附带了两个由Robo支持的有用命令行工具。

这两个命令允许从命令行执行索引和搜索,从而使调试和与外部工具的集成更加容易。

这些命令需要与数据库建立连接,如果您在Docker或VM后面运行SuiteCRM,请从与SuiteCRM Web服务器相同的主机上的shell中执行它们。

弹性:指数

该 elastic:index命令允许从命令行运行索引并查看分步日志。支持部分索引和完整索引。

用法

elastic:index [<differential> = 1]

例子

运行完整索引:

vendor/bin/robo elastic:index 1

运行部分索引:

vendor/bin/robo elastic:index 0

该 elastic:search命令允许您直接从CLI执行与搜索栏相同的查询。它还允许返回带有关于记录的其他数据的JSON。

用法

elastic:search <query> [<size> = 20] [<showJson> = false]

您可以使用for query参数的完整查询语法。

size选项指定结果数。

当。。。的时候 showJson 选项已启用,将为每个结果返回一个json

例子

使用关键字“rohan”搜索所有内容:

vendor/bin/robo elastic:search "rohan"

搜索名为“Maxwell”的第一个帐户并显示JSON:

vendor/bin/robo elastic:search "_type:Accounts AND named:Maxwell" 1 true

故障排除

为了使Elasticsearch扩展的故障排除过程更容易,使用单独的文件提供非常详细和专用的日志记录: search_index.log。这主要是因为索引过程在后台运行,难以调试。记录调用将重定向到标准日志记录,并使用配置的日志记录级别进行过滤。

除了检查日志之外,您还可以尝试使用命令行工具从命令行运行搜索或索引 。鉴于控制台输出的冗长,这肯定有助于缩小问题范围。

最后,如果在搜索过程中的某个时刻发生错误,则在管理设置中启用开发人员模式将提供清晰的异常页面。