1、Elasticsearch 是无模式的,这意味着它可以接受您提供的任何命令,并处理它以供以后查询。Elasticsearch 中的所有内容都被存储为文档,所以您的第一个练习是存储一个包含歌词的文档。首先创建一个索引,它是您的所有文档类型的容器 类似于 MySQL 等关系数据库中的数据库。然后,将一个文档插入该索引中,以便可以查询该文档的数据。创建一个索引Elasticsearch 命令的一般格式是:REST VERBHOST:9200/index/doc-type 其中REST VERB是PUT、GET或DELETE。(使用 cURL-X动词前缀来明确指定 HTTP 方法。)要创建一个索引,可
2、在您的 shell 中运行以下命令:curl -XPUT http:/localhost:9200/music/模式可选尽管 Elasticsearch 是无模式的,但它在幕后使用了 Lucene,后者使用了模式。不过 Elasticsearch 为您隐藏了这种复杂性。实际上,您可以将 Elasticsearch 文档类型简单地视为子索引或表名称。但是,如果您愿意,可以指定一个模式,所以您可以将它视为一种模式可选的数据存储。插入一个文档要在/music索引下创建一个类型,可插入一个文档。在第一个示例中,您的文档包含数据(包含一行)“Deck the Halls” 的歌词,这是一首最初由威尔士诗
3、人 John Ceirog Hughes 于 1885 年编写的传统的圣诞歌曲。要将包含 “Deck the Halls” 的文档插入索引中,可运行以下命令(将该命令和本教程的其他 cURL 命令都键入到一行中):9200/music/songs/1 -d name: Deck the Halls, year 1885, lyricsFa la la la la 前面的命令使用PUT动词将一个文档添加到/songs文档类型,并为该文档分配 ID 1。URL 路径显示为index/doctype/ID。查看文档要查看该文档,可使用简单的GET命令:curl -XGET Elasticsearch
4、 使用您之前进索引中的 JSON 内容作为响应:_indexmusic,_typesongs_id1_version1,foundtrue,_source 更新文档如果您认识到日期写错了,并想将它更改为 1886 怎么办?可运行以下命令来更新文档:9200/music/lyrics/1 1886, 因为此命令使用了相同的唯一 ID 1,所以该文档会被更新。删除文档(但暂时不要删除)暂时不要删除该文档,知道如何删除它就行了:curl -XDELETE 从文件插入文档这是另一个技巧。您可以使用一个文件的内容来从命令行插入文档。尝试此方法,添加另一首针对传统歌曲 “Ballad of Casey J
5、ones” 的文档。将清单 1 复制到一个名为 caseyjones.json 的文件中;也可以使用示例代码包中的 caseyjones.json 文件(参见下载)。将该文件放在任何方便对它运行 cURL 命令的地方。(在下载的代码中,该文件位于根目录中。清单 1. “Ballad of Casey Jones” 的 JSON 文档artistWallace Saunders, 1909,styles traditional,albumUnknownBallad of Casey JonesCome all you rounders if you want to hearThe story o
6、f a brave engineerCasey Jones was the rounders name.s nameOn the six-eight wheeler, boys, he won his fameThe caller called Casey at half past fourHe kissed his wife at the station doorHe mounted to the cabin with the orders in his handAnd he took his farewell trip to that promisd landChorus:Casey Jo
7、nes-mounted to his cabinCasey Jones-with his orders in his handAnd he took his. land运行以下命令,将此文档到您的music索引中:$ curl -XPUT 9200/music/lyrics/2 -d caseyjones.json在该索引中时,将清单 2 的内容(包含另一手民歌 “Walking Boss”)保存到 walking.json 文件中。清单 2. “Walking Boss” JSONClarence Ashley 1920Walking BossfolkprotestTraditionalWa
8、lkin bossI dont belong to youI belongTo that steel driving crewWell you work one dayWork one dayThen go lay around the shanty two将此文档推送到索引中:9200/music/lyrics/3 -d walking.json搜索 REST API是时候运行一次基本查询了,此查询比您运行来查找 “Get the Halls” 文档的简单要复杂一些。文档 URL 有一个内置的_search端点用于此用途。在歌词中找到所有包含单词you的歌曲:9200/music/lyric
9、s/_search?q=lyrics:youq参数表示一个查询。响应是:took107,timed_outfalse,_shardstotal5,successfulfailed0,hits2,max_score0.15625,2_score 1909,Come all you roundersif you want to hear The story of a brave engineer Casey Jones was the rounders name. Come allyou rounders if you want to hear The story of a brave engin
10、eer Casey Jones was the rounderOn the six-eight wheeler, boys, he won his fame The caller called Casey at half past four He kissedhis wife at the station door He mounted to the cabin with the orders in his hand And he took hisfarewell trip to that promisd land Chorus: Casey Jones-mounted to his cabi
11、n Casey Jones-with hisorders in his hand Casey Jones-mounted to his cabin And he took his. land,30.06780553,ClarenceAshley 1920, boss Walkin boss I dont belong to you I belong Ibelong I belong To that steel driving crew Well you work one day Work one day Work one day Then golay around the shanty two
12、使用其他比较符还有其他各种比较符可供使用。例如,找到所有 1900 年以前编写的歌曲:q=year:1900&fields=year检查搜索返回对象清单 3 给出了 Elasticsearch 从前面的查询返回的数据。清单 3. 查询结果 6, false, 5, 0 , 2,max_score 1.0, fields 1920 , 1909 在结果中,Elasticsearch 提供了多个 JSON 对象。第一个对象包含请求的元数据:看看该请求花了多少毫秒 (took) 和它是否超时 (timed_out)。_shards字段需要考虑 Elasticsearch 是一个集群化服务的事实。甚至
13、在这个单节点本地部署中,Elasticsearch 也在逻辑上被集群化为分片。继续查看清单 3 中的搜索结果,可以观察到hits对象包含: total字段,它会告诉您获得了多少个结果 max_score,用于全文搜索 实际结果实际结果包含属性,因为您将参数添加到了查询中。否则,结果中会包含source,而且包含完整的匹配文档。_index、_type_id的用途不言自明;_score指的是全文搜索命中长度。这 4 个字段始终会在结果中返回。使用 JSON 查询 DSL基于查询字符串的搜索很快会变得很复杂。对于更高级的查询,Elasticsearch 提供了一种完全基于 JSON 的特定于领域的
14、语言 (DSL)。例如,要搜索album值为traditional的每首歌曲,可创建一个包含以下内容的 query.json 文件:query :match然后运行:9200/music/lyrics/_search -d query.json从 Java 代码使用 Elasticsearch“Elasticsearch 强大功能会在通过语言 API 使用它时体现出来。Elasticsearch 强大功能会在通过语言 API 使用它时体现出来。现在我将介绍 Java API,您将从一个应用程序执行搜索。部分,获取相关的示例代码。该应用程序使用了 Spark 微型框架,所以可以很快设置它。示例应
15、用程序为一个新项目创建一个目录,然后运行(将该命令键入到一行上):mvn archetype:generate -DgroupId=com.dw -DartifactId=es-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false要生成一个项目来在 Eclipse 中使用,可通过cd进入 Maven 创建的项目目录,并运行mvn eclipse:eclipse。在 Eclipse 中,选择FileImportExisting Project into Workspace。导航到您使用 Mave
16、n 的文件夹,选择该项目,单击Finish。在 Eclipse 中,您可以看到一个基本的 Java 项目布局,包括根目录中的 pom.xml 文件和一个 com.dw.App.java 主要类文件。将您所需的依赖项添加到 pom.xml 文件中。清单 4 给出了完整的 pom.xml 文件。清单 4. 完整的 pom.xmlproject xmlns=/maven.apache.org/POM/4.0.0 xmlns:xsi=/www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=/maven.apache.org/POM/4.0.0 ht
17、tp:/maven.apache.org/maven-v4_0_0.xsd 4.0.0groupIdcom.dwartifactIdes-demopackagingjarversion1.0-SNAPSHOTname/nameurl/maven.apache.orgbuildpluginspluginorg.apache.maven.pluginsmaven-compiler-plugincompilerVersion1.8source/sourcetarget/target/configuration/plugin/plugins/builddependenciesdependencycom
18、.sparkjavaspark-core2.3spark-template-freemarkerorg.elasticsearchelasticsearch2.1.1/project清单 4 中的依赖项获取 Spark 框架核心、Spark Freemarker 模板支持和 Elasticsearch。另请注意,我将版本设置为 Java 8,Spark 需要该版本(因为它大量使用了 lambda)。我不知道您的情况,但我不久前构建了许多 RESTful 应用程序,所以为了改变以下步调,您将为应用程序提供一个更加传统的 “提交和加载 (submit-and-load)” UI。在 Eclipse
19、 中,在导航器中右键单击项目,选择ConfigureConvert to Maven Project,以便 Eclipse 可以解析 Maven 依赖项。转到项目,右键单击该项目,然后选择MavenUpdate Project。Java 客户端配置Elasticsearch 的 Java 客户端非常强大;它可以建立一个嵌入式实例并在必要时运行管理任务。但我在这里将重点介绍如何运行针对您已运行的节点的应用程序任务。运行一个 Java 应用程序和 Elasticsearch 时,有两种操作模式可供使用。该应用程序可在 Elasticsearch 集群中扮演更加主动或更加被动的角色。在更加主动的情况
20、下(称为 Node Client),应用程序实例将从集群接收请求,确定哪个节点应处理该请求,就像正常节点所做的一样。(应用程序甚至可以托管索引和处理请求。)另一种模式称为 Transport Client,它将所有请求都转发到另一个 Elasticsearch 节点,由后者来确定最终目标。获取 Transport Client对于演示应用程序,(通过 App.java 中执行的初始化)选择 Transport Client,并保持 Elasticsearch 执行最低级别的处理:Client client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(localhost), 9300);如果连接到一个 Elasticsearch 集群,构建器可以接受多个地址。(在本例中,您只有一个 localhost 节点。)连接到端口 9300,而不是像之前在 REST API 的 cURL 中一样连接到 9200。Java 客户端将会使用这个特殊端口,使用端口 9200 不起作用。(其他 Elasticsearch 客户
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1