首页 文章 精选 留言 我的

精选列表

搜索[windows],共10000篇文章
优秀的个人博客,低调大师

windows下elasticsearch配置及spring boot 简单demod的 整合

学习过程: elasticsearch 下载安装 elasticsearch-head 安装 spring boot 下elasticsearch的配置 使用ElasticsearchRepository实现增删改查(ElasticsearchRepository,elasticsearchTemplate) 如何优雅的使用FunctionScoreQueryBuilder 测试 一、elasticsearch 下载安装:ElasticSearch官网:http://www.elasticsearch.org 在安装Elasticsearch之前我们需要先安装jdk的环境,这些都是老生常谈,我们不去多加叙述,具体的安装步骤我们可以参考https://www.cnblogs.com/ljhdo/p/4887557.html,这里有详细的Elasticsearch及jdk安装步骤。安装好之后我们可以找到安装目录bin下的批处理文件来启动项目. 看到这样的界面后我们可以在浏览器里输入http://localhost:9200/可以看到返回了一段json,其中对外服务的http端口,默认为9200,9300是客户端的端口。在这里elasticsearch我们就安装完了。 { "name": "node-1", "cluster_name": "my-application", "cluster_uuid": "YWYqGhDnSE-z3pbVDEs8rQ", "version": { "number": "6.3.0", "build_flavor": "default", "build_type": "zip", "build_hash": "424e937", "build_date": "2018-06-11T23:38:03.357887Z", "build_snapshot": false, "lucene_version": "7.3.1", "minimum_wire_compatibility_version": "5.6.0", "minimum_index_compatibility_version": "5.0.0" }, "tagline": "You Know, for Search" } 二、elasticsearch-head 安装 elasticsearch安装完后我们需要安装head插件管理我们的elasticsearch,上面链接教程中elasticsearch使用的是2.4.4的版本,而我用的是6.3.0的版本,在cmd中使用es命令的方式已经不可用了。我们需要自己区去官网下载安装包,在这之前还需要先安装node.js和grunt,参考https://www.cnblogs.com/Onlywjy/p/Elasticsearch.html我们能很快的完成elasticsearch及head的安装和配置。安装完成后我们可以通过cmd进入到head的安装目录通过“npm run start ”来启动head插件,在浏览器中输入”http://localhost:9100“来访问。 三、spring boot 下配置 pom依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> application.yml spring: data: elasticsearch: cluster-name: my-application #elasticsearch/config文件下elasticsearch.yml中设置的cluster.name cluster-nodes: 127.0.0.1:9300 #客户端端口,启动elasticsearch时默认为9300 四、使用ElasticsearchRepository实现增删改查 参考https://blog.csdn.net/larger5/article/details/79777319,偷懒的同学,可以直接看下面,我们完成了pojo,dao,controller的编写,由于只是做了个demo就没有使用service层去规范。在clone链接中代码时候我们会遇到一些错误,下面我们着手解决这些错误。 pojo import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; /** * @Author: gaofeng_peng * @Date: 2018/6/24 10:44 */ @Document(indexName = "product", type = "book") public class Book { @Id String id; String name; String message; String type; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getType() { return type; } public void setType(String type) { this.type = type; } 在上述代码中@Document注解中indexName指的是索引,可以理解成mysql中数据库 ,type既对应的是数据表。 dao public interface BookDao extends ElasticsearchRepository<Book, String> { Book findBooksById(String id); void deleteById(String id); } 参考的文档中,dao层没有写接口,在后面的实现中会报错,忖度作者的用意controller下getBookById中bookDao.findOne() 方法 对应了findBooksById,insertBook中bookDao.delete() 对应deleteById,相信这么简单大家都能看出来。 controller package com.bookstore.controller.backend; import com.bookstore.dao.BookDao; import com.bookstore.pojo.Book; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @Author: gaofeng_peng * @Date: 2018/6/24 11:02 */ @RestController @RequestMapping("book") public class BookController { @Autowired private BookDao bookDao; /** * 1、查 id * * @param id * @return */ @GetMapping("/get/{id}") public Book getBookById(@PathVariable String id) { return bookDao.findBooksById(id); } /** * 2、查 ++:全文检索(根据整个实体的所有属性,可能结果为0个) * * @param q * @return */ @GetMapping("/select/{q}") public List<Book> testSearch(@PathVariable String q) { QueryStringQueryBuilder builder = new QueryStringQueryBuilder(q); Iterable<Book> searchResult = bookDao.search(builder); Iterator<Book> iterator = searchResult.iterator(); List<Book> list = new ArrayList<Book>(); while (iterator.hasNext()) { list.add(iterator.next()); } return list; } /** * 3、查 +++:分页、分数、分域(结果一个也不少) * * @param page * @param size * @param q * @return */ @GetMapping("/{page}/{size}/{q}") public List<Book> searchCity(@PathVariable Integer page, @PathVariable Integer size, @PathVariable String q) { // 分页参数 Pageable pageable = new PageRequest(page, size); FunctionScoreQueryBuilder.FilterFunctionBuilder[] functions = { new FunctionScoreQueryBuilder.FilterFunctionBuilder( QueryBuilders.matchQuery("name", q), ScoreFunctionBuilders.weightFactorFunction(1000)), new FunctionScoreQueryBuilder.FilterFunctionBuilder( QueryBuilders.matchQuery("message", q), ScoreFunctionBuilders.weightFactorFunction(1000)) }; FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(functions); // 分数、分页 SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable) .withQuery(functionScoreQueryBuilder).build(); Page<Book> searchPageResults = bookDao.search(searchQuery); return searchPageResults.getContent(); } /** * 4、增 * * @param book * @return */ @PostMapping("/insert") public Book insertBook(Book book) { bookDao.save(book); return book; } /** * 5、删 id * * @param id * @return */ @DeleteMapping("/delete/{id}") public Book insertBook(@PathVariable String id) { Book book = bookDao.findBooksById(id); bookDao.deleteById(id); return book; } /** * 6、改 * * @param book * @return */ @PutMapping("/update") public Book updateBook(Book book) { bookDao.save(book); return book; } } 在这里我们要着重讲一下参考文档中的searchCity 方法,下面是作者的写法: /** * 3、查 +++:分页、分数、分域(结果一个也不少) * @param page * @param size * @param q * @return * @return */ @GetMapping("/{page}/{size}/{q}") public List<Book> searchCity(@PathVariable Integer page, @PathVariable Integer size, @PathVariable String q) { // 分页参数 Pageable pageable = new PageRequest(page, size); // 分数,并自动按分排序 FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery() .add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("name", q)), ScoreFunctionBuilders.weightFactorFunction(1000)) // 权重:name 1000分 .add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("message", q)), ScoreFunctionBuilders.weightFactorFunction(100)); // 权重:message 100分 // 分数、分页 SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable) .withQuery(functionScoreQueryBuilder).build(); Page<Book> searchPageResults = bookDao.search(searchQuery); return searchPageResults.getContent(); } 大家注意下红色的部分,由于我们在配置依赖时候没有指定elasticsearch的版本,现在如果还是直接clone上面的依赖的话会发现已经没有add的方法了,一种方式去指定版本,都走到这一步了,我们采取另一种方式使用 FunctionScoreQueryBuilder functionScoreQuery(ScoreFunctionBuilder function)方法,具体看下面 public List<Book> searchCity(@PathVariable Integer page, @PathVariable Integer size, @PathVariable String q) { // 分页参数 Pageable pageable = new PageRequest(page, size); FunctionScoreQueryBuilder.FilterFunctionBuilder[] functions = { new FunctionScoreQueryBuilder.FilterFunctionBuilder( QueryBuilders.matchQuery("name", q), ScoreFunctionBuilders.weightFactorFunction(1000)), new FunctionScoreQueryBuilder.FilterFunctionBuilder( QueryBuilders.matchQuery("message", q), ScoreFunctionBuilders.weightFactorFunction(1000)) }; FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(functions); // 分数、分页 SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable) .withQuery(functionScoreQueryBuilder).build(); Page<Book> searchPageResults = bookDao.search(searchQuery); return searchPageResults.getContent(); } 上面我们使用的是:SpringData封装,直接在 dao 接口继承 ElasticsearchRepository的方式,作者很全面还提供了elasticsearchTemplate的方式, package com.bookstore.controller.backend; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @Author: gaofeng_peng * @Date: 2018/6/24 10:58 */ @RestController @RequestMapping("/template") public class BookControllerTemplate { @Autowired ElasticsearchTemplate elasticsearchTemplate; /** * 查询所有 * @throws Exception */ @GetMapping("/all") public List<Map<String, Object>> searchAll() throws Exception { //这一步是最关键的 Client client = elasticsearchTemplate.getClient(); // @Document(indexName = "product", type = "book") SearchRequestBuilder srb = client.prepareSearch("product").setTypes("book"); SearchResponse sr = srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(); // 查询所有 SearchHits hits = sr.getHits(); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (SearchHit hit : hits) { Map<String, Object> source = hit.getSource(); list.add(source); System.out.println(hit.getSourceAsString()); } return list; } } 到此位置简单的增删改查就完成了,还需一点注意的是作者@RestController什么的没加,记得加上。。。。。 五、如何优雅的使用FunctionScoreQueryBuilder 福利链接:https://www.programcreek.com/java-api-examples/index.php?api=org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder,找了老半天,必须给我个 上面的是FunctionScoreQueryBuilder的Java代码示例,总有那么一种方式适合你。 六、测试 在这里我们安装了google 的restlet client 插件来方便测试,当然,也可以使用head插件上的复合查询来测试。 图片比较大这里我们只放部分的测试结果,就不一一列举了,至此整个项目就完成了,有什么不足,欢迎大家指点。

优秀的个人博客,低调大师

Windows XP下Dynamips模拟器的安装与使用

一、Dynamips与Boson的区别 Boson是仅仅是模拟Cisco的命令;而Dynamips则是模拟Cisco的IOS,通过模拟Cisco这个IOS,能得到一个真实的Cisco环境。 Dynamips是一个Cisco路由器模拟软件,它可以模拟Cisco 2691,3620,3640,3660,3725,3745和Cisco7206硬件平台,而且可以运行标准的Cisco IOS文件。 Dynagen 是Dynamips的一个基于文本的前端控制系统,它采用”Hypervisor”超级监控模式和Dynamips通信。Dynagen简化了虚拟网络的创建和工作。 可以简单地认为: Dynamips 作用:模拟CiscoIOS 对应文件:.BIN文件 Dynagen 作用:模拟网络拓扑 对应文件:.net文件 二、程序下载、安装 1、下载要用到的软件 前提文件(WinPcap用于提供桥接路由器接口到物理网卡,就是将物理网卡作为虚拟路由器的网卡,可以让虚拟路由器和真实环境中的设备通信), WinPcap_4_1_2.exe Dynamips和Dynagen安装文件 Dynamips_win_setup_0.2.6-RC1-0.6.0.exe Dynagen-0.11.0_win_setup.exe Cisco3620路由器的IOS文件,这里找到的是3620 unzip-c3620-i-mz.122-37.bin 2、安装: 首先安装WinPcap(否则无法安装dynamips),只能安装在默认路径下C:\Program Files\WinPcap 再安装dynamips和dynagen,也只能安装在默认路径下C:\Program Files\Dynamips 安装完后,桌面有三个快捷方式:Dynamips Server、Network device list、Pemu Server,还有一个文件夹快捷方式Dynagen sample Labs。 3、Dynamips的两个重要目录:(C:\Program Files\Dynamips) images目录:用于存放Cisco的IOS文件 sample_labs目录:用于存放网络拓扑文件 三、配置 本文以Cisco3620为例。 1、首先将Cisco3620路由器的IOS文件unzip-c3620-i-mz.122-37.bin拷贝到 C:\Program Files\Dynamips\images目录下。 2、网络拓扑的编写(编写 .net文件) 在C:\Program Files\Dynamips\sample_labs下新文件夹test,并在里面建立一个后序名为.net的test文件,然后进行编辑。 这是一个简单的测试事件,表示两个路由器R1和R2,R1的s1/1连接到R2的s1/1;具体内容如下,#表示注解(程序不执行),由于idlepc值暂时未知,先不填写。 autostart = false [localhost] port = 7200 udp = 10000 `router R1` image = \Program Files\Dynamips\images\unzip-c3620-i-mz.122-37.bin model = 3620 console = 3001 ram = 64 confreg = 0x2142 #idlepc = exec_area = 32 mmap = true #slot0=NM-4E #slot1 = PA-4T s1/1 = R2 s1/1 `router R2` image = \Program Files\Dynamips\images\unzip-c3620-i-mz.122-37.bin model = 3620 console = 3002 ram = 64 confreg = 0x2142 #idlepc = exec_area = 32 mmap = true #slot0=NM-4E #slot1 = PA-4T (网络拓扑文件基本参数的定义,见本文最后) 四、运行 1、首先运行Dynamips Server(直接双击运行桌面上的快捷方式可以了),出现“Hypervisor TCP control server started”就表示正常启动了,注意,这个是服务器端,要一直开着(无法最小化到系统)。 2、运行test.net文件(在C:\Program Files\Dynamips\sample_labs\test里),打开test.net时,Dynagen会自动运行,同时网络文件被启动。 输入start R1命令启动R1,启动时会提示没有idle-pc value, 输入 idlepc get R1命令,获取idle-pc value,等待一会儿,会列出许多值,将count值最大(图示中是ox6036cr34[77],count是77)的写入到test.net中。需要手动编辑,注意,要将idlepc前的#去掉,R1、R2都改为这个值。然后关闭当前运行的的Dynagen及Dynamips窗口。 3、重新运行Dynamps及test.net,即再按1、2步骤再来一回,这里将R1、R2都启动。 启动R1,命令:start R1, 启动R2,命令:start R2, 命令:list,查看虚拟实验环境中的所有设备; 命令:start R1 R2,同时启动R1、R2; 命令:stop R1 R2,同时关闭R1、R2 R1、R2启动时,Dynamips窗口会显示相息,如下图所示 五、使用SecuretCRT操作路由器 在以上操作中,路由器R1、R2正常启动了,但跟现实中路由器一样,PC机需要通过telnet方式对它进行操作。 简单而不大好用的方法是,运行命令窗口,使用telnet命令进行远程操作 比如访问R1,命令为:telnet 127.0.0.1 3001 (注,这里的3001是拓扑文件中的console = 3001)。 另外,也可以在上面运行的Dynagen窗口中执行telnet 命令 比如访问R1,命令为:telnet R1 当然,比较常见的方法是使用软件SecuretCRT。 这里使用的是SecuretCRT6.7,安装过程没什么好注意的,一路默认就是了。 第一将运行,会出现Quick Connect对话框,设置如下: Protocol,选择Telnet方式; Hostname,由于实验环境是运行在本地,输入127.0.0.1 Port,端口是net文件中指定的console的值,这里要连接R1,所以输入3001 设置完,点击“Connect”按钮即可连接,如下图所示,标签栏与Hostname一样,为方便起见,右击对其rename为R1 在Connect in Tab中,使用同样的方法连接R2, 同时连接R1和R2,按 Ctrl+Tab,可切换标签 详解网络拓扑文件 网络拓扑文件基本参数的定义 autostart = false [localhost] port = 7200 udp = 10000 `router R1` image = \Program Files\Dynamips\images\unzip-c3620-i-mz.122-37.bin model = 3620 console = 3001 ram = 64 confreg = 0x2142 idlepc = ox6036cr34 exec_area = 32 mmap = true #slot0=NM-4E #slot1 = PA-4T s1/1 = R2 s1/1 autostart:定义双击拓扑文件后,是否运行路由器。true表示自动运行;false表示不自动运行(默认自动运行)。 image:必须,定义IOS文件存放的位置。 ram,必须,定义为路由器分配内存的大小。模拟路由器最小64 ;模拟交换机最小96 (如果希望速度块一点,可分配多一点的内存)。 Model,必须,定义模拟路由器的型号。这里用3620的IOS,所以定义为3620。 Console,必须,定义路由器的console口的端口号。 Idlepc,优化必须,正确定义该值能解决CPU占用100%的问题。 slot0、slot1,可选,定义路由器模块,3620可支持2个模块。NM-4E表示四个以太口。 在实际应用中,这个拓扑文件,是有许多写法的,玩弄起来,就像程序员写编程一样,有声明、有嵌套,这个以后再作进一步分析。 本文转自Sunshyfangtian 51CTO博客,原文链接:http://blog.51cto.com/sunshyfangtian/771320,如需转载请自行联系原作者

优秀的个人博客,低调大师

Windows 2012 R2 FSMO角色相关小记录

科普: 森林级别(即一个森林只存在一台DC有这个角色): (1)、Schema Master 架构主机 (2)、Domain Naming Master 域命名主机 域级别(即一个域里面只存一台DC有这个角色): (1)、PDC Emulator PDC (2)、RID Master RID 池管理器 (3)、Infrastructure Master 结构主机(基础架构主控) 查询FSMO角色所在主机 Powershell > Get-ADForest | Format-List SchemaMaster,DomainNamingMaster Get-ADDomain | Format-List InfrastructureMaster,PDCEmulator,RIDMaster CMD命令行 > netdom query fsmo 本文转自 ljpwinxp 51CTO博客,原文链接:http://blog.51cto.com/191226139/1630904

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册