显示导航

365bet地区 ElasticSearch

365bet地区了解如何在365bet地区应用程序中使用ElasticSearch

sPuneet Behl塞尔吉奥·德尔阿莫

365bet地区版本 3.3.2

训练

365bet地区培训由创建并积极维护365bet地区框架的人们开发和交付

入门

弹性搜索是高度可扩展的开源全文本搜索和分析引擎,它使您可以快速,近乎实时地存储搜索和分析大量数据。通常用作支持具有复杂搜索功能和要求的应用程序的基础引擎技术

365bet地区365bet地区 ElasticSearch插件旨在实现365bet地区与基于Lucene并提供分布式功能的开源搜索引擎ElasticSearch的简单集成。

365bet地区在本指南中,您将学习如何使用365bet地区 Elasticsearch插件在Elasticsearch中创建索引以加快搜索速度

特征

  • 将域类映射到Elasticsearch中的相应索引

  • 提供用于跨域搜索的ElasticSearch服务

  • 注入用于特定域搜索索引和取消索引的域类方法

  • 自动将通过GORM进行的所有更改反映到索引

  • 允许使用Groovy Content Builder DSL进行搜索查询

  • 支持术语突出显示

你需要什么

要完成本指南,您将需要以下内容

  • 花些时间在你手上

  • 正确配置ES HOME的计算机上安装的Elasticsearch v

  • 体面的文本编辑器或IDE

  • 正确配置了JAVA HOME的JDK或更高版本

如何完成指南

要开始,请执行以下操作

要么

365bet地区指南存储库包含两个文件夹

  • 初始初始项目通常是一个简单的365bet地区应用程序,其中包含一些其他代码,可以帮助您快速入门

  • 完成一个完整的示例它是按照指南中介绍的步骤进行操作并将这些更改应用于文档的结果。初始

要完成指南,请转到初始

  • 光盘进入grails指南grails elasticsearch初始

并按照下一节中的说明进行操作

您可以直接前往完成的例子如果你光盘进入grails指南grails elasticsearch完整

编写指南

通过Docker安装Elasticsearch

如果您尚未安装Docker,则需要安装它.

根据您的环境,您可能需要将Docker的可用内存增加到GB或更多。

  • 通过执行以下命令确保Docker计算机正在运行

docker机器状态默认
  • 默认Docker机器未运行,然后通过执行以下bash命令启动机器

docker机器默认启动

执行完上述命令后,您应该在终端上看到如下内容

启动默认默认值检查网络以在需要时重新创建默认值等待IP机默认值已启动等待SSH可用检测供应者启动的机器可能具有新的IP地址您可能需要重新运行docker machine env命令
  • 现在我们已经成功启动了Docker机器,让我们记下的IP地址默认将来将用于将应用程序连接到Elasticsearch的Docker机器运行以下命令以查看Docker机器的IP地址

docker machine ls名称活动的驱动程序状态URL群集DOCKER错误默认virtualbox运行tcp v ce
  • 启动Elasticsearch Docker容器

eval docker machine env默认docker run ppe发现类型单节点e ES JAVA OPTS Xms m Xmx me http cors启用true e http cors allow origin https e http cors allow headers授权X请求内容长度内容类型e http cors allow证书true e集群名称elasticsearch e xpack安全性已启用false docker elastic co elasticsearch elasticsearch

配置ElasticSearch插件

  • 要安装插件,请将以下属性添加到建立gradle:

建立gradle
定义elasticsearchVersion'5.4.1' (1)分机'elasticsearch版本'elasticsearchVersion
1 定义Elasticsearch版本
编译"org grails插件elasticsearch"
  • 为了将Application连接到Elasticsearch,在中定义Elasticsearch插件配置yml应用程序如下

grails应用配置会议应用yml
elasticSearch:
    datastoreImplhibernateDatastore(1)
    客户:
        模式运输(2)
        主机:
          - {主办: 192.168.99.100, 港口: 9300} (3)集群名称elasticsearch(4)
    disableAutoIndex:  (5)
    bulkIndexOnStartup: 真正 (6)
1 Hibernate数据存储实现应注意存储事件
2 该插件创建一个传输客户端,该客户端将连接到远程ElasticSearch实例,而无需加入集群。运输客户使用传输模块远程连接到Elasticsearch集群,并在每次操作时以循环方式与它们通信
3 的主机地址运输客户连接到
4 Elasticsearch集群的名称
5 确定插件是否应在ES实例上自动反映任何数据库保存更新删除默认为false
6 应用程序应在启动时启动批量索引操作

Elasticsearch日志

在末尾添加logback groovy下一条语句查看与ElasticSearch相关的日志

365bet地区应用程序配置会议日志回切
日志"grails插件elasticsearch"调试'标准输出'], )

创建域类

您可以创建一个域类

365bet地区应用程序域演示书groovy
演示  {
    标题作者关于href静态的关于类型: '文本'
    }
}

标记域可搜索

为了在Elasticsearch中为此域创建索引,请定义一个静态的属性称为可搜寻的在先前定义的域类

365bet地区应用程序域演示书groovy
    静态的可搜索的标题促进: 2.0  (1)关于促进: 1.0  (2)除了'href'] (3)
    }
1 boost通常用于微调相关性得分了通过赋予文档更多的权重来对每个文档进行分类。标题文件的相关性得分了与其他结果相比,文档的数量将增加一倍
2 如果搜索查询与关于得分了将会1.0乘以其他结果
3 href该属性包含在不属于该属性的列表中可搜寻的.

上一个示例将创建以下Elasticsearch映射

{
  "映射": {
    "": {
      "属性": {
        "作者": {
          "全部包含": 真正,
          "词向量": "位置偏移",
          "类型": "文本"
        },
        "关于": {
          "全部包含": 真正,
          "词向量": "位置偏移",
          "类型": "文本"
        },
        "标题": {
          "全部包含": 真正,
          "词向量": "位置偏移",
          "促进": 2,
          "类型": "文本"
        }
      }
    }
  }
}

GORM数据服务

创建一个GORM数据服务简化CRUD操作

365bet地区应用服务演示BookDataService groovy
演示进口 grails gorm services服务
进口 常规转换CompileStatic

静态编译
服务()
接口BookDataService保存标题作者关于href计数

保存初始数据

通过修改BootStrap常规如下

365bet地区应用程序初始化演示BootStrap groovy
演示进口 
进口 免费环境
进口 常规转换CompileStatic

静态编译
 引导带 {

    上市 最后 静态的 清单< 地图<, GRAILS BOOKS标题'格劳斯一步一步',
                    作者: '克里斯蒂安·奥拉鲁(Cristian Olaru)',
                    href: 'https grailsthreebook com'关于'了解如何使用配置文件和插件使用365bet地区快速有效地实现完整的绿地应用程序。以本书随附的示例应用程序为例。'标题'实用365bet地区',
                    作者: '埃里克·赫尔格森'href'https www grails book com'关于'通过第一本专门针对365bet地区的书,学习构建365bet地区应用程序背后的基本概念。提供了最新的代码示例,使您可以轻松地继续学习。'标题'谈到365bet地区',
                    作者: '恩里克·罗伯·魏斯曼'href'http www casadocodigo com br产品grails书'关于'这是365bet地区上最好的参考,用葡萄牙语编写。它是处理许多用户往往忽略的细节的框架的出色指南。'标题'365bet地区善良笔记本',
                    作者: '休伯特·克莱因·伊金克'href'https leanpub com grails善良笔记本'关于'通过代码片段体验365bet地区框架通过代码示例和简短文章发现365bet地区隐藏的功能这些文章和代码将帮助您快速入门,并提供对365bet地区的更深入了解。'标题'权威指南',
                    作者: 'Jeff Scott Brown和Graeme Rocher'href'http www apress com'关于'如标题所示,这是由开发团队核心成员编写的有关365bet地区框架的权威性参考'标题'行动中的365bet地区',
                    作者: '格伦·史密斯和彼得·莱德布鲁克'href'http www manning com gsmith'关于'《 365bet地区 in Action》的第​​二版全面介绍了365bet地区,旨在帮助您快速提高生产力''365bet地区快速入门指南',
                    作者: '戴夫·克莱因和本·克莱因'href'http www亚马逊com gp产品标签misa'关于'此修订和更新的版本通过迭代构建一个唯一的工作应用程序向您展示了如何使用365bet地区。'标题'编程365bet地区',
                    作者: '伯特·贝克维斯'href'http shop oreilly com产品吗'关于'深入研究365bet地区架构,发现此应用程序框架如何发挥其魔力'
            ]
    ]  清单< 地图<, > >

    上市 最后 静态的 清单< 地图<, 古籍书标题: '使Java Groovy',
                    作者: '知道丝袜',
                    href: 'http www manning com kousen',
                    关于: '通过添加Groovy使Java开发更容易每章重点介绍Java开发人员所做的任务,例如构建测试或使用数据库或静态Web服务,并展示Groovy如何使这些任务更容易'],
            [
                    标题: 'Groovy in Action nd Edition',
                    作者: 'DierkKönig纪尧姆·拉福格Paul KingCédricChampeau Hamlet D\'艾西·埃里克·普拉格特(Arcy Erik Pragt)和乔恩·斯基特(Jon Skeet)',
                    href: 'http www manning com koenig',
                    关于: '这是开发团队核心成员撰写的有关Groovy语言的无可争议的权威参考。'],
            [
                    标题: '针对特定领域语言的Groovy',
                    作者: '菲加尔·迪尔',
                    href: '针对特定领域语言的http www packtpub com groovy DSL书',
                    关于: '了解Groovy如何帮助Java开发人员轻松将领域特定的语言构建到他们的应用程序中'
            ],
            [
                    标题: 'Groovy食谱',
                    作者: '安德烈·亚当莫维奇(Andrey Adamovitch)',
                    href: 'http www packtpub com常规食谱书',
                    关于: '本书不仅仅包含使用Groovy强大功能来开发针对日常编程挑战的解决方案的食谱'
            ],
            [
                    标题: '编程Groovy',
                    作者: '文卡特·苏布拉马尼亚姆(Venkat Subramaniam)',
                    href: 'http pragprog com book vslg编程groovy',
                    关于: '本书可帮助经验丰富的Java开发人员学习使用Groovy的知识,包括该语言的基础知识及其最新进展。'
            ],
    ]  清单< 地图<, BookDataService bookDataService定义初始化ServletContext对于 (地图<, bookInfo GRAILS BOOKS GROOVY BOOKS bookDataService保存bookInfo标题bookInfo作者bookInfo关于bookInfo href

365bet地区应用服务演示BookSearchService groovy
演示进口 
进口 常规转换CompileStatic

静态编译
 BookSearchService地图查询elasticSearchService搜索查询指标: , 类型: , 得分了: 真正])  地图 (1)
    }
}
1

服务返回一个地图包含代表找到的命中总数的总条目searchResults条目包含命中,而scores条目包含命中

创建一个单元测试以验证elasticSearchService被提供的一次调用询问

src测试groovy演示BookSearchServiceSpec groovy
演示进口 
进口 免费测试服务ServiceUnitTest
进口 spock lang规格

 BookSearchServiceSpec 延伸规格实施ServiceUnitTest {

    定义 "搜索使用索引和类型预定并评分真实"服务elasticSearchService模拟ElasticSearchService什么时候服务搜索'365bet地区')

        然后:
        1服务elasticSearchService搜索'', [指标: , 类型: , 得分了: 真正])
    }
}

实施搜索行动这将查询Elasticsearch

365bet地区应用控制器演示BookController groovy
演示进口 
进口 验证ValidationException
进口 常规转换CompileStatic

进口 静态的 org springframework http HttpStatus

静态编译
 BookControllerBookSearchService bookSearchService静态的responseFormats'json']
    静态的allowedMethods搜索: "得到"
    ]

    定义 搜索(q如果状态未找到(1)
            返回
1 未找到.

创建一个测试以验证控制器仅响应HTTP GET请求

src测试groovy演示BookControllerSpec groovy
演示进口 365bet地区测试Web控制器ControllerUnitTest
进口 spock lang规格
进口 spock lang展开
进口 静态的 不允许使用javax servlet http http HttpServletResponse SC方法
进口 静态的 

 BookControllerSpec 延伸规格实施 {

    展开
    定义 "测试BookController搜索不接受方法请求"(方法什么时候然后响应状态SC方法不允许哪里'', '删除', '开机自检', '']
    }

    定义 "测试BookController搜索接受GET请求"() {
        什么时候请求方法'得到'然后响应状态SC未找到

现在创建一个名为搜索意见书搜索gson将用于显示结果JSON格式.

365bet地区应用程式浏览量书籍搜寻
model Long total List searchResults地图得分json totalCount总结果g渲染searchResults得分g渲染得分

修改网址映射

修改UrlMappings常规通过将以下内容添加到映射

grails应用程序控制器演示UrlMappings groovy
"书籍搜寻$q?"(控制者: '', 行动: "搜索")

src测试groovy演示UrlMappingsSpec groovy
演示进口 免费测试Web UrlMappingsUnitTest
进口 spock lang规格

 网址映射规范 延伸规格实施UrlMappingsUnitTest {

    虚空虚空 "图书搜索端点映射在路径中包括查询词"() {
        期望verifyForwardUrlMapping"图书搜索grails", 控制者: '', 行动: '搜索'q''
        }
    }
}

功能测试

365bet地区365bet地区使用的测试框架是斯波克365bet地区Spock提供了一种表达性的语法,用于基于Groovy语言编写测试用例,因此非常适合365bet地区。它包含一个JUnit运行器,这意味着IDE支持实际上是通用的,任何可以运行JUnit测试的IDE都可以运行Spock测试

以下是针对搜索的行动BookController

src集成测试groovy演示RestSpec groovy
演示进口 grails插件其余客户端RequestCustomizer
进口 grails插件rest client RestBuilder
进口 grails插件其余客户端RestResponse
进口 spock lang规格

 RestSpec 延伸规格RestBuilder restRestBuilder RestResponse获取路径DelegatesToRequestCustomizer闭包定制器空值休息得到"HTTP本地主机${服务器端口}${路径}"定制器
src集成测试groovy演示BookControllerFunctionalSpec groovy
演示进口 grails插件其余客户端RestResponse
进口 grails测试mixin集成集成
进口 spock lang忽略

忽略( { 系统盖滕'特拉维斯')  布尔值 } )
积分
 BookControllerFunctionalSpec 延伸RestSpec BookDataService bookDataService虚空 "测试搜索动作是否正确搜索"() {
        期望bookDataService计数什么时候RestResponse rsp获取"图书搜索Beckwith")

        然后: "该列表仅返回一个实例"rsp json totalCount1rsp json结果第一作者'伯特·贝克维斯'
    }
}
您需要运行一个ElasticSearch实例,此测试才能通过

365bet地区在本指南中,我们学习了如何配置Elasticsearch 365bet地区插件。该插件目前专注于公开365bet地区域类。它高度采用现有Searchable插件作为其语法和行为的参考。

帮助365bet地区

OCI赞助了本指南的创建OCI提供了几种365bet地区服务:

免费咨询

OCI 365bet地区团队包括365bet地区联合创始人Jeff Scott Brown和Graeme Rocher检查我们的365bet地区课程并向发展和维护365bet地区的工程师学习

Grails OCI团队