此增强功能仅适用于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
小组或您将收到许可问题。
下载图片:
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
通过.deb安装(不推荐)
下载并安装公共签名密钥:
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
。这主要是因为索引过程在后台运行,难以调试。记录调用将重定向到标准日志记录,并使用配置的日志记录级别进行过滤。
除了检查日志之外,您还可以尝试使用命令行工具从命令行运行搜索或索引 。鉴于控制台输出的冗长,这肯定有助于缩小问题范围。
最后,如果在搜索过程中的某个时刻发生错误,则在管理设置中启用开发人员模式将提供清晰的异常页面。