spring的事务:https://www.cnblogs.com/xd502djj/p/10940627.html
----------------------------------------------------------------------------------01------------------------------------------------------------------------------------
只要不是java操作都是9200,Java操作是9300
内容:
luncence:https://blog.csdn.net/cying90/article/details/84342587
---------------------------------------------------------------------------------02-------------------------------------------------------------------------------------
搜索的流程说明:
站内用的最多的。
数据的索引,数据的分词。
----------------------------------------------------------------------------03----------------------------------------------------------------------------------
es结构。
mongodb是数据库集合文件。
----------------------------------------------------------------------------04----------------------------------------------------------------------------------
es的安装。
win安装es。
第一步:解压
第二步:
java是9300其他是9200.
------------------------------------------------------------------------------05---------------------------------------------------------------------------------------
第一步:创建索引。创建索引是以put的方式提交的。
第二步:类型下添加文档,添加文档是post提交的。注意要在类型下添加文档。
索引:tensquare_elasticsearch
类型:article
文档:_id
查找:在索引类型下查找,查找是get的方式。
修改,没有就增加:修改是put的形式。
增加:
精确查找按照id查询:get方式提交。
条件查询:支持模糊查询。前提是分词的。s不代表spring。
模糊查询:模糊查询是对词条的模糊。
删除:
注意都是restful的风格的。
----------------------------------------------------------------------------06----------------------------------------------------------------------------------
安装head插件。
第一步:安装
npm install
第二步:.....参照文档。
----------------------------------------------------------------------------07----------------------------------------------------------------------------------
跨域问题的解决:
连接:
----------------------------------------------------------------------------08----------------------------------------------------------------------------------
head的简单使用:
----------------------------------------------------------------------------09----------------------------------------------------------------------------------
ik分词器:
第一步:解压,改名为ik文件夹。
第二步:将ik文件夹扔到
就可以用了。
第三步:重启服务器。
第四步:进行测试。
再次测试:
---------------
ik分词如何加入词条:
第一步:在文件夹添加.dic文件。
第二步:
第三步:测试
----------------------------------------------------------------------------10----------------------------------------------------------------------------------
搜索微服务的开发:
第一步:新建模块
第二步:
引入破pom:
第三步:yml文件
server:
port: 9007
spring:
application:
name: tensquare-search
data:
elasticsearch:
# cluster-nodes: 192.168.79.129:9300
cluster-nodes: 127.0.0.1:9300
第四步:写启动类
@SpringBootApplication
public class SearchApplication {
public static void main(String[] args) {
SpringApplication.run(SearchApplication.class,args);
}
@Bean
public IdWorker idWorker(){
return new IdWorker(1,1);
}
}
做的功能:
----------------------------------------------------------------------------11----------------------------------------------------------------------------------
添加文章。
第一步:
type可以不用创建直接写。
注意这个实体类不用都展示出来,只要展示我们用的就可以。
第二步:写Dao
第三步:写一套
第四步:测试下,添加
成功:
----------------------------------------------------------------------------12----------------------------------------------------------------------------------
简单的搜索文章:
定义方法名自动的生成sql语句。
public interface SearchDao extends ElasticsearchRepository<Article,String> {
Page<Article> findByTitleOrContentLike(String title, String content, Pageable pageable);
}
测试:
----------------------------------------------------------------------------13----------------------------------------------------------------------------------
elasticserach与mysql的同步问题:
我们自己存的话就自己保存,目前有logstash进行同步。
安装:
第一步:解压
进入:
第二步:输入命令
-e:直接写内容
-f:指定文件的路径
语句的意思事键盘输入什么输出什么。
----------------------------------------------------------------------------14----------------------------------------------------------------------------------
同步的问题:
第一步:
这个文件。
第二步:
放入:
完善模板:
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.244.136:3306/tensquare_article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "123456"
# the path to our downloaded jdbc driver
jdbc_driver_library => "D:\softWork\logstash-5.6.8\mysqletc\mysql-connector-java-5.1.46.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50"
#以下对应着要执行的sql的绝对路径。
#statement_filepath => ""
statement => "SELECT id,title,content,state from tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "* * * * *"
}
}
output {
elasticsearch {
#ESIP地址与端口
hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
index => "tensquare_article"
#自增ID编号
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
第三步:
查看结果:
----------------------------------------------------------------------------15----------------------------------------------------------------------------------
logstash同步数据特征:
数据库少了数据,但是es不会少。
所以数据不要真的删除,es同步可以更新,不可以删除的。
----------------------------------------------------------------------------16----------------------------------------------------------------------------------
在docker中安装es:
第一步在docker安装es:
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
第二步:访问下测试
第三步:创建索引库
第四步:在java代码换地址。
第五步:添加文档:
这个是不能直接使用的。具体的解决办法看下一节课。
----------------------------------------------------------------------------17----------------------------------------------------------------------------------
宿主机可以使用9300.
第一步:进入到容器里面。
docker exec -it tensquare_es /bin/bash
第二步:
不能vi容器的配置文件,只能vi宿主机的配置文件。
拷贝文件到宿主机:退出容器拷贝不是停止容器。
docker cp tensquare_elasticsearch容器名称:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
前提是容器要启动了。
第三步:停止和删除容器。
第四步:重新创建容器
docker run -di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 -v
/usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch
.yml elasticsearch:5.6.8
第五步:修改yml文件
表示所有的ip都是可以访问的。
第六步:
重启。报错。
第七步:
第八步:重启es。重启虚拟机。
第九步:访问。
----------------------------------------------------------------------------18----------------------------------------------------------------------------------
docker的ik分词器的安装:
首先测试下是不是用分词器了:
第一步:
第二步:将ik分词传到宿主机器
第三步:复制到docker的es
docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins
docker exec -it tensquare_elasticsearch /bin/bash
第四步骤:重启
docker restart tensquare_elasticsearch
第五步:测试
http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=%E6%88%91%E6%98%AF%E7%A8%8B%E5%BA%8F%E5%91%98
----------------------------------------------------------------------------19----------------------------------------------------------------------------------
head插件:
第一步:修改跨域
加跨域语句
第二步:
docker restart tensquare_elasticsearch
第三步:
docker run -di --name=tensquare_header -p 9100:9100 mobz/elasticsearch-head:5
第四步:
---------------------------------------------------------------------------20----------------------------------------------------------------------------------
ES有用的文章:
mapping:https://segmentfault.com/a/1190000019006317
https://blog.csdn.net/napoay/article/details/73100110#323-store
save:https://blog.csdn.net/u013089490/article/details/84323762
倒排索引:https://www.cnblogs.com/cjsblog/p/10327673.html
b+Tree:https://tech.souyunku.com/?p=9543
--------------------------
关于es的补充:
第一篇博客:https://segmentfault.com/a/1190000019006317
http://192.168.244.136:9200/website/_mapping
上面是插入数据自动生成的mapping,还有手动生成的mapping。这种自动或手动为index中的type建立的一种数据结构和相关配置,称为mapping。
mapping:当我们插入几条数据,让ES自动为我们建立一个索引
倒排索引正则化。mapping本质上就是index的type的元数据,决定了数据类型,建立倒排索引的行为,还有进行搜索的行为。